سلام دوستان؛یه ارایه دارم که به تعداد روزهای هفته + یه ایندکس که واسه کل هفته هست؛ میخوام واسه هر روز از کاربر یه زمان کاری رو بگیرم،اگه تک تک ست کرد واسه هر ایندکس ست بشه، و اگه کل هفته رو خواست ست کنه بشه،الان برنامشو نوشتم واسه تک تک روزها درس کار میکنه،ولی وقتی یه فور میذارم رو ارایه که واسه همش ست کنه،برنامه به هم میریزه، از دوستان نظری ندارن کمکم کنه؟ممنون میشم
@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 میشه و این فانکشن اجرا میشه،واسه تک تک روزها تست میکنم درست کار میکنه،
اگه میدونید تا این سه تا کامپوننت رو اپلود کنم لینکشو بدم خدمتتون
http://s3.picofile.com/file/8375224218/components.rar.html
این سه تا کامپوننت هست که من نوشتم
تابع 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;
}
}
}
@ali.bayat
بله،حواسم نبود این مورد رو بردارم،داشتم تست میکردم،میخواسم این شرط کار نکنه،ولی بازم جواب نمیده
@ali.bayat
حس میکنم این فور که میذارم،شبیه watch کار میکنه،ینی همیشه هر چی واسش بیاد،رو همش ست میکنه،نمیدونم مشکل از چیه که این تداخل رو ایجاد میکنه،5 روزه دستم به این بنده،چند بار همین قطعه کدو نوشتم ولی بازم جواب نمیده
ببینید.. شما اگر به داده 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 ساختار کار رو در کنسول ببینید .. بعد گزینه هایی که باید تغییر بدید واضح تر میشه.
@ali.bayat
اون اطلاعاتی که از کامپوننت فرزند میاد هم ارایس،میاد میشینه به جای مقدار workTime،تک تک که مقدار میدم درس کار میکنه،ولی تو فور نه
@ali.bayat
شرمنده داداش، این مورد رو تست نکردین؟ اگه امکانش هست کمکم کنید،خیلی درگیرش شدم،ولی کار نمیده،این حلقه رو که برمیدارم درست کار میکنه،ولی باحلقه خراب میشه،راهی به ذهنتون نمیرسه که نیاز به حلقه نباشه؟
@ali.bayat
من از کامپوننت فرزند که day هست،ارایه میفرستم به week،با emit، ارایه هم شامل چند ابجکت از ساعت هست به این شکل،
[{hour: '08:00', rest: false}, {hour: '18:00', rest: false}]
این ارایه رو داخل workTime هر ابجکت weeks ذخیره میکنم،ینی همون لحظه راه اندازی وقتی تک به تک واسه هر روز ساعت تنظیم کنیم،مقدارها به درستی ست میشه، ولی وقتی ابتدا واسه کل هفته مقدار ست میکنیم و بعد میخوایم واسه یه روز ساعت تنظیم کنیم، به هم میریزه
یه کار دیگه رو هم امتحان کنید. تابع 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)
@ali.bayat
سلام داداش،الان از سرکار اومدم،تست کردم،نشد باز،اصن وقتی یه بار حلقه رو ارایه تغییرات انجام میده،انگار هر تغییر دیگه ای هم انجام بشه،رو ارایه ست میشه،یه چی شبیه watch
@ali.bayat
نه هنوز، حلقه اگه یه بار اجرا بشه،شبیه واتچ کار میکنه،که هر تغییری رو ارایه انجام بشه رو واسه همش ست میکنه
@ali.bayat
:( شرمنده، راهی به نظرتون نرسید؟ واقعا کلافم کرده، به نظرتون این حلقه فور داره کارو خراب میکنه؟ روش جایگزینی نداره؟ از vuex استفاده بشه فرقی میکنه؟
کارو سخت میکنه یا بهتره؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟