Ember.js 更新数组中的对象时,EmberJS视图未更新
我有一个把手模板,我有一张桌子Ember.js 更新数组中的对象时,EmberJS视图未更新,ember.js,handlebars.js,Ember.js,Handlebars.js,我有一个把手模板,我有一张桌子 <script type="text/x-handlebars" data-template-name="customers"> <table> <tbody> {{#each nomday in allnominationdays}} <tr class="nomdays" {{action "saveNomDay" nomday on="focusOut"}}> <td
<script type="text/x-handlebars" data-template-name="customers">
<table>
<tbody>
{{#each nomday in allnominationdays}}
<tr class="nomdays" {{action "saveNomDay" nomday on="focusOut"}}>
<td>{{nomday.confirmedVolume}}</td>
<td>{{nomday.variance}}</td>
</tr>
{{/each}}
</tbody>
</table>
</script>
但是,当我更改对象数组的值时,我的视图没有改变。如果我将对象数组设置为null,模板将更新,并且不显示任何表。我不确定是什么破坏了视图更新的绑定
代码块在控制器函数中更新视图,但在操作中调用时不更新。但是在操作中,将object数组设置为null会更新视图并删除整个表。不知道发生了什么事。EmberJS的新功能
谢谢,我太晚了,但迟做总比不做强。发生这种情况的原因是视图在值的更新可以传播到屏幕之前被渲染。执行类似以下代码的操作: --模板
为什么不使用Ember.set更改对象的属性(
variance
)?尝试使用Em.set(allnamignationdays.objectAt(0),'variance',75)
。谢谢@Microfed-Ember.set(allnamignationdays.objectAt(0),'variance',75);作品我不知道这套语法。还有一种类似的get语法,可以从数组中只获取1个对象,这与我在allNaminationDays=this.get('allNaminationDays');中所做的不同;。@Micofed还了解了为什么代码在控制器函数中工作,但在从操作激发时不工作?您可以通过Array.get('firstObject')
(this.get('allnamignationdays.firstObject'))或数组[0](objectAt
实际执行相同操作)从Ember.Array获取第一个对象1.我对你的第二个问题没有把握。在我看来,如果从这些函数中的代码看,控制器的操作和控制器的函数/方法是相同的,所以我不能说任何事情。:)
update: function()
{
console.log('Not Working');
allnominationdays = this.get('allnominationdays');
//this.set('allnominationdays',null);
allnominationdays.objectAt(0).variance = 75;
this.set('allnominationdays',allnominationdays);
},
{{#if isVisible}}
<table>
<tbody>
{{#each nomday in allnominationdays}}
<tr class="nomdays" {{action "saveNomDay" nomday on="focusOut"}}>
<td>{{nomday.confirmedVolume}}</td>
<td>{{nomday.variance}}</td>
</tr>
{{/each}}
</tbody>
</table>
{{/if}}
self.set('isVisible',false);
var propgationPromise = new Promise(function(resolve, reject) {
//update Value
console.log("promise started");
resolve();
});
propgationPromise.then(function(){
console.log("promise stopped");
self.set('isVisible', true);
});