راکت

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

16 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

16
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

@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

تخصص: برنامه نویس لاراول

@ali.bayat

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

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

تابع 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

تخصص: برنامه نویس لاراول

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

ببینید.. شما اگر به داده 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

تخصص: برنامه نویس لاراول

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

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

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

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

یه کار دیگه رو هم امتحان کنید. تابع 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

تخصص: برنامه نویس لاراول

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

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

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

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

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

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