Ember.js 如何修改Emberjs控制器中的对象,以便更新视图?
在我的路由器中,我执行以下操作:Ember.js 如何修改Emberjs控制器中的对象,以便更新视图?,ember.js,Ember.js,在我的路由器中,我执行以下操作: connectOutlets: function(router) { router.get('applicationController').connectOutlet( 'acquisitions', router.get('acquisitionsController').find()); } AcquisitionController如下所示: (function(app) { 'use strict' var Acqui
connectOutlets: function(router) {
router.get('applicationController').connectOutlet(
'acquisitions', router.get('acquisitionsController').find());
}
AcquisitionController
如下所示:
(function(app) {
'use strict'
var AcquisitionsController = Ember.Controller.extend({
all: [],
find: function() {
var self = this,
pk = $('#object-pk').attr('data-value');
var imageResource = App.Image.create({id: pk});
imageResource.fetch().done(function(data) {
_.each(data.acquisition_pks, function(value, index) {
var acquisitionResource = App.Acquisition.create({id: value});
acquisitionResource.fetch().done(function(data) {
self.all.addObject(data);
});
});
});
return self.all;
},
remove: function(acquisition) {
var self = this;
var acquisitionResource = App.Acquisition.create(acquisition);
acquisitionResource.destroy().done(function() {
self.all.removeObject(acquisition);
});
},
addDuration: function(acquisition) {
var self = this;
if(acquisition.duration === null) {
acquisition.duration = 1;
var acquisitionResource = App.Acquisition.create(acquisition);
var obj = self.all.findProperty('id', acquisitionResource.data.id);
if (obj !== undefined)
obj.duration = 1;
acquisitionResource.save();
}
}
});
app.AcquisitionsController = AcquisitionsController;
app.acquisitionsController = AcquisitionsController.create();
})(window.App);
{{#unless acquisition.duration}}
<li><a href="#" {{action addDuration acquisition}}>{% trans "Add duration" %}</a></li>
{{/unless}}
find()
和remove()
函数工作正常,我的视图得到更新
但是,当我从模板中以{{action}}
的形式调用addDuration
时,尽管函数执行并保存了对象,但视图不会更新
我认为该视图在某种程度上观察到了我控制器的all
属性,因为我设置的是我的插座的内容
,它看起来像是在我添加和删除项目时被观察到的,而不是当其中的项目更改时
我怎样才能解决这个问题
编辑
这里有一些关于addDuration
应该做什么的解释
我正在使用,所以我没有使用模型
,而是使用资源
,如下所示:
var Acquisition = Ember.Resource.define({
url: '/images/api/acquisition',
schema: {
id: String,
date: Date,
number: Number,
duration: Number
}
});
这允许与my CRUD API无缝集成,包括fetch()
和save()
余烬资源的方法
最初,duration
属性为null
,在我的模板中,我执行以下操作:
{{#if acquisition.duration}}
<tr>
<th>{% trans "Duration" %}</th>
<td>{{view Ember.TextField valueBinding="acquisition.duration"}}</td>
</tr>
{{/if}}
因为我正在检查null
,在上面的{{{if acquisition.duration}}
块中,最初,duration
文本字段不会显示。因此,我希望用户单击addduration
按钮,这将产生创建TextField
的效果
理想情况下,该字段应该是空的,但现在我满足于初始值1
,因为我认为这会更容易。因此,在我的操作
中,我试图更新当前的采集
对象,以便将持续时间
属性设置为1
我对您的添加持续时间
函数有点困惑。但是看起来您需要调用obj.set('duration',1)
而不是obj.duration=1。我添加了一个大编辑,其中解释了addDuration
函数并显示更多代码。不幸的是,您的建议不起作用,因为obj
没有set
方法。它对我不起作用的原因是我没有使用模型,而只是使用资源。我已经编写了一个模型并将其连接到资源,现在set
方法起作用了。