محمد قربانی
5 سال پیش توسط محمد قربانی مطرح شد
16 پاسخ

اپدیت ابجکت های یه ارایه

سلام دوستان؛یه ارایه دارم که به تعداد روزهای هفته + یه ایندکس که واسه کل هفته هست؛ میخوام واسه هر روز از کاربر یه زمان کاری رو بگیرم،اگه تک تک ست کرد واسه هر ایندکس ست بشه، و اگه کل هفته رو خواست ست کنه بشه،الان برنامشو نوشتم واسه تک تک روزها درس کار میکنه،ولی وقتی یه فور میذارم رو ارایه که واسه همش ست کنه،برنامه به هم میریزه، از دوستان نظری ندارن کمکم کنه؟ممنون میشم


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

درود
کدتون رو به اشتراک بگذارید


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش آپدیت شد
0

@ali.bayat
سلام دوست عزیز،ممنون که همیشه پاسخگوی سوالات ما مبتدی ها هستین:)

setWorkTime(payload, index) {
                if (index !== 7) {
                    this.weeks[index].workTime = payload;
                } else if (index === 7) {
                    for (let i in this.weeks) {
                        this.weeks[i].workTime = payload;
                    }
                }
            }

این قسمتی هست که از کامپوننت فرزند اطلاعات emit میشه و این فانکشن اجرا میشه،واسه تک تک روزها تست میکنم درست کار میکنه،
اگه میدونید تا این سه تا کامپوننت رو اپلود کنم لینکشو بدم خدمتتون


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat

http://s3.picofile.com/file/8375224218/components.rar.html

این سه تا کامپوننت هست که من نوشتم


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

تابع setWorkTime شما یه مشکل داره:

                if (index !== 7) {
                    this.weeks[index].workTime = payload;
                } else if (index !== 7) {
                    for (let i in this.weeks) {
                        this.weeks[i].workTime = payload;
                    }
                }

شما در if اول چک میکنید که Index برابر ۷ نباشه... و بعدش else و دوباره چک میکنید که Index برابر ۷ نباشه.
if دوم رو به شکل زیر حذف کنید ببینید مشکل حل میشه:

setWorkTime(payload, index) {
    if (index !== 7) {
        this.weeks[index].workTime = payload;
    } else {
        for (let i in this.weeks) {
            this.weeks[i].workTime = payload;
        }
    }
}

محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
بله،حواسم نبود این مورد رو بردارم،داشتم تست میکردم،میخواسم این شرط کار نکنه،ولی بازم جواب نمیده


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
حس میکنم این فور که میذارم،شبیه watch کار میکنه،ینی همیشه هر چی واسش بیاد،رو همش ست میکنه،نمیدونم مشکل از چیه که این تداخل رو ایجاد میکنه،5 روزه دستم به این بنده،چند بار همین قطعه کدو نوشتم ولی بازم جواب نمیده


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
0

ببینید.. شما اگر به داده this.weeks دقت کنید... مقدارش برابر با آرایه ای هست که خودش شامل چندین آبجکته.. پس به 2 مرحله Iteration نیاز داره. یا به عبارت دیگه به دو تا for نیاز داره.

به کد زیر دقت کنید:

for (let day in this.weeks) {
    for (let index in day){
  console.log('index: ' + day[index],'Day Name :' + weeks[day].name)
  }
}

خروجی زیر رو میده

index: 0 Day Name :شنبه 
index: 1 Day Name :یکشنبه 
index: 2 Day Name :دوشنبه 
index: 3 Day Name :سه شنبه 
index: 4 Day Name :چهارشنبه
index: 5 Day Name :پنجشنبه
index: 6 Day Name :جمعه
index: 7 Day Name :کل هفته

و به گزینه workTime اگر دقت کنید .. دوباره خودش آرایه ای از آبجکتهاست: یعنی کد زیر:

weeks[day].workTime

مقدار آرایه در اون روز رو بر میگردونه.

سعی کنید ابتدا با چند تا console.log ساختار کار رو در کنسول ببینید .. بعد گزینه هایی که باید تغییر بدید واضح تر میشه.


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش آپدیت شد
0

@ali.bayat
اون اطلاعاتی که از کامپوننت فرزند میاد هم ارایس،میاد میشینه به جای مقدار workTime،تک تک که مقدار میدم درس کار میکنه،ولی تو فور نه


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
شرمنده داداش، این مورد رو تست نکردین؟ اگه امکانش هست کمکم کنید،خیلی درگیرش شدم،ولی کار نمیده،این حلقه رو که برمیدارم درست کار میکنه،ولی باحلقه خراب میشه،راهی به ذهنتون نمیرسه که نیاز به حلقه نباشه؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

شما مقادیر رو تک به تک، به چه شکل پاس میدید؟ (همون حالتی که میگید درست کار میکنه)


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
من از کامپوننت فرزند که day هست،ارایه میفرستم به week،با emit، ارایه هم شامل چند ابجکت از ساعت هست به این شکل،

[{hour: '08:00', rest: false}, {hour: '18:00', rest: false}]

این ارایه رو داخل workTime هر ابجکت weeks ذخیره میکنم،ینی همون لحظه راه اندازی وقتی تک به تک واسه هر روز ساعت تنظیم کنیم،مقدارها به درستی ست میشه، ولی وقتی ابتدا واسه کل هفته مقدار ست میکنیم و بعد میخوایم واسه یه روز ساعت تنظیم کنیم، به هم میریزه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

یه کار دیگه رو هم امتحان کنید. تابع setWorkTime که برای گزینه های تکی کار میکنه استفاده کنید:

setWorkTime(payload, index) {
    if (index !== 7) {
        this.weeks[index].workTime = payload;
    }
}

و یه setAllWorkTime درست کنید و برای مقدار دهی کل هفته از اون استفاده کنید:

setAllWorkTime(payload) {

    for (var i = 0; i < this.weeks.length-1 ; i++) {
        this.weeks[i].workTime = payload[i];
    }           
}

اگر بخواهید تمام workTime هارو بصورت یکجا ست کنید باید ابتدا، یه آرایه که حاوی آرایه های ساعت ها هست درست کنید; مقادیر هفته رو بگیرید و پشت سر هم در یه آرایه قرار بدید.

var dataArray = [
    [{hour: '08:00', rest: false}, {hour: '08:00', rest: false}],
    [{hour: '09:00', rest: false}, {hour: '09:00', rest: false}],
    [{hour: '10:00', rest: false}, {hour: '10:00', rest: false}],
    [{hour: '11:00', rest: false}, {hour: '11:00', rest: false}],
    [{hour: '12:00', rest: false}, {hour: '12:00', rest: false}],
    [{hour: '13:00', rest: false}, {hour: '13:00', rest: false}],
    [{hour: '14:00', rest: false}, {hour: '14:00', rest: false}],
    [{hour: '15:00', rest: false}, {hour: '15:00', rest: false}]
]   

و به شکل استفاده کنید زیر:

setAllWorkTime(dataArray)

محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
سلام داداش،الان از سرکار اومدم،تست کردم،نشد باز،اصن وقتی یه بار حلقه رو ارایه تغییرات انجام میده،انگار هر تغییر دیگه ای هم انجام بشه،رو ارایه ست میشه،یه چی شبیه watch


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

مشکل ارور در حلقه حل شد؟


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
نه هنوز، حلقه اگه یه بار اجرا بشه،شبیه واتچ کار میکنه،که هر تغییری رو ارایه انجام بشه رو واسه همش ست میکنه


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
:( شرمنده، راهی به نظرتون نرسید؟ واقعا کلافم کرده، به نظرتون این حلقه فور داره کارو خراب میکنه؟ روش جایگزینی نداره؟ از vuex استفاده بشه فرقی میکنه؟
کارو سخت میکنه یا بهتره؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام