テーブルのオブジェクトが複雑です。
vue.jsで複雑な計算オブジェクトを変更する
{
1510002000: {
date: "07.11.17"
hours: {
1510002000:{
activity:{
activity: "Тест",
color: "#00ff00",
end_at: 1510005600,
start_at: 1510002000,
type_id: 1
}
},
1510005600: {
...
},
...
}
},
....
}
これは、このオブジェクトを使用して、テンプレートからのコードです:
<tr v-for="date in this.tds">
<td>{{ date.date }}</td>
<td is="hour-td"
v-for="hour in date.hours"
:color="hour.activity.color"
:start_at="hour.activity.start_at"
:end_at="hour.activity.end_at"
:activity="hour.activity.activity"
:type_id="hour.activity.type_id"
>
</td>
</tr>
私は計算されたプロパティとしてそれを評価したが、私は親コンポーネントは、データassyncを提供する場合、テーブルを再描画する必要があり、このように見えますので、私は(と呼ばれる「活動」を支える)小道具のためのウォッチャーがあります
watch: {
activities: function(){
var vm = this;
let dth = new DateTimeHelper;
if (this.activities.length > 0){
this.activities.forEach(function(activity){
let dateTimestamp = dth.getDateTimestampFromTimestamp(activity.start_at); // just getting the key
if (vm.tds[dateTimestamp]){
if (vm.tds[dateTimestamp].hours[activity.start_at]){
vm.tds[dateTimestamp].hours[activity.start_at].activity.activity = activity.activity;
vm.tds[dateTimestamp].hours[activity.start_at].activity.color = activity.color;
vm.tds[dateTimestamp].hours[activity.start_at].activity.type_id = activity.type_id;
}
}
});
}
console.log(vm.tds) // here I can see that the object is filled with new data
}
},
問題は、テーブルが再描画しないことです。より正確には、コンポーネント「時 - 時間」は新しいデータを含まない。
また、私はVue.setを使用しようとしましたが、その成功はありません
更新テーブルを手伝ってもらえますか?私はリファクタリングと試行のために5時間を費やしました。事前に
おかげ
SOLUTION
は、私の場合、2つの状態が存在することができます:活動があり、何の活動はありません。配列ダイレクトで私は(あなたがhereを読むことができます)あなたの問題はChange Detection Caveats
ためVueの既知の問題であることを考えるV-IF =「activities.length」
投稿したコードから大きな画像を取得するのは難しいですが、以前は日付と計算されたプロパティで作業していましたが、Vueでは更新として「日付」の変更は表示されません。計算されたプロパティはキャッシュされ、その依存関係が更新された場合にのみ更新されます。これは、おそらくあなたの 'hour-td'コンポーネントが動作していないためです。私が試みる最初のことは、計算されたプロパティにあるタイムスタンプから 'new Date()'を作成することです。 –
はい、あなたはキャッシュについて正しいでしょう。しかし、日付では問題がありません(タイムスタンプでは常に数値になるので、サーバーから来ています)、キャッシュではなく(ウォッチャーを使用してキャッシュを書き換えます)、問題はありません。ここでは、コンポーネントの完全なコードを見つけることができますhttps://github.com/Vasek18/my-hours.ru/blob/master/resources/assets/js/components/hours-table.vue –