Я создаю небольшой SPA, и поэтому я начал с этого базового принципа, который я протестировал и встроил в код ниже, с которым у меня возникли проблемы. он работает ТОЛЬКО в том случае, если я вызываю вторичное свойство в DOM (почему?), и я включил его, чтобы проиллюстрировать, откуда я начал, надеясь, что принципы будут переведены по мере того, как я создавал.
JS:
var app = new Vue({
el: '#app',
computed: {
today: function() {
return new Date().getTime();
},
tomorrow: function() {
return this.today + (1*24*60*60*1000);
},
});
ДОМ:
<div id='app'>
<p>{{ today }}</p>
<p>{{ tomorrow }}</p>
</div>
так. это работает. опять же, ТОЛЬКО если app.tomorrow
вызывается в DOM. (Хотел бы я знать, как это НЕ нужно ...) НО моя проблема - это следующая часть, которую я основываю на этом стартовом коде. это НЕ работает:
JS:
var app = new Vue({
el: '#app',
data: {
dueNow: 0,
reports: { 90: [], 'DN': [] },
},
computed: {
today() {
return new Date().getTime();
},
tMinus30() {
return new Date().getTime() - (30 * 24 * 60 * 60 * 1000);
},
dueNow() {
var count = 0;
$.each(this.rows, function(index, obj) {
var workingDate = new Date(obj.dateSubmitted).getTime();
console.log('workingDate: '+workingDate);
console.log('today: '+this.today); <-- console reports 'undefined'!?
console.log('today: '+this.tMinus30); <-- console reports 'undefined'!?
if(workingDate < this.today && workingDate > this.tMinus30){
console.log('knock, knock: due NOW'); <-- therefore this never fires
count++;
console.log('count: '+count);
// build reports array - doesn't work, but that's for another day...
this.reports['DN']['count'] = push(count);
this.reports['DN'][index]['reportID'] = push(obj.id);
this.reports['DN'][index]['assetID'] = push(obj.assetid);
}
});
return count;
},
}
});
ДОМ:
<div id='app'>
<div class="col-lg-2">
<h1 class="text-center pt-2">NOW</h1>
<p>{{ today.getDay() }}</p>
<p class="img-text mb-1" @click="expandInfo('DN')">{{ dueNow }}</p>
</div>
</div>
так что я не только не получаю count
строк, которые dueNow
, я тоже не получаю today.getDay()
вычисленных, что на основе это из VueJS, должно работать. Я подозреваю, что это летающий кошмар, но я его не вижу ... он ДЕЙСТВИТЕЛЬНО перебирает строки должным образом. он ДЕЙСТВИТЕЛЬНО вычисляет рабочую дату для каждой строки. но больше ничего не работает. Я думал, что понимаю VueJS достаточно хорошо, чтобы попытаться это сделать. и я даже построил его из первого примера ... но я не понимаю, что сломано.
какой принцип я упускаю, чтобы сделать этот гель? такое чувство, что какая-то концепция ускользнула от меня.
РЕДАКТИРОВАТЬ: я также прочитал эту статью, но не знаю, что это применимо, поскольку нет ничего, что не является уже не заявлено в данных ...
РЕДАКТИРОВАТЬ: ОК! :) мне нужно уточнить. когда я говорю "это не работает", я имею в виду, что вычисленное свойство tomorrow
не отображает и сообщает другое вычисленное свойство в консоли как "undefined", несмотря на то, что оно (today
) отображается нормально (без дополнительного метода) . мой ожидаемый / желаемый результат состоит в том, что я увижу число, указывающее, сколько строк прошло проверку и равно dueNow
, и я хочу, чтобы today
отображались как «понедельник», а tomorrow
как «вторник» (например). последний должен быть взаимозаменяемым с другими функциями даты. если возможно, я также хотел бы, чтобы массив reports
обновился должным образом ... но сейчас это выходит за рамки области видимости.
this
внутри функции, созданной$.each(this.rows, function(index, obj) {
, не будет таким же, как в окружающей функции. Если вместо этого вы используете стрелочную функцию, т.е.$.each(this.rows, (index, obj) => {
,this
привязка будет правильной. Доступны альтернативные способы привязки значенияthis
, если вы не хотите использовать стрелочные функции. Это не Vue, это просто стандартная привязка JSthis
. - person skirtle   schedule 05.03.2020{{ today.getDay() }}
. Вычисляемое свойствоtoday
является числом, поэтому у него не будетgetDay
метода. Я предполагаю, что вы стремились кgetDay
методуDate
, ноtoday
неDate
. Сначала он создаетDate
, но затем вызываетgetTime
, который просто возвращает число. - person skirtle   schedule 05.03.2020tomorrow
в вашем шаблоне, вам нужно будет дать более четкое объяснение того, что именно вы подразумеваете под "работает" и что происходит, когда он "не работает. '. Лично я бы не стал использовать для этого вычисляемое свойство, поскольку оно не имеет реактивных зависимостей, поэтому его нельзя обновить. Я бы просто вставилtoday
вместоdata
. - person skirtle   schedule 05.03.2020today.getDate
проблемы: facepalm ... ты прав! Я ожидал, что он просто вернет число обратно в дату, а затем ... ну, вы поняли. Ладно. я исправлю это. Благодарность! теперь, когда я это вижу, имеет смысл. - person WhiteRau   schedule 05.03.2020data
может содержать подобное вычисленное свойство. Я также не слишком беспокоился, так как данные должны быть статичными до следующей загрузки. хотя, если я могу быть перенесен в данные как есть, я буду счастлив принести с собой все дополнительные достоинства, которые приходят с этим. Я протестирую сегодня вечером и опубликую свои выводы. - person WhiteRau   schedule 05.03.2020