在我的路由器中,我这样做:
connectOutlets: function(router) {
router.get('applicationController').connectOutlet(
'acquisitions', router.get('acquisitionsController').find());
}
AcquisitionsController
看起来像这样:
(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);
find()
和remove()
函数运行正常,我的视图也会更新。
但是,当我从模板中将addDuration
作为{{action}}
调用时,虽然该函数已执行且对象已保存,但视图未更新。
我认为该视图以某种方式观察我的控制器的all
属性,因为我设置的是我的插座的content
,它看起来像是当我添加和删除项目时观察到,但是当它内部的项目发生变化时观察到。
我该如何解决问题?
以下是对addDuration
应该做什么的一点解释。
我正在使用ember-resource,所以我没有model
,而是resource
,如下所示:
var Acquisition = Ember.Resource.define({
url: '/images/api/acquisition',
schema: {
id: String,
date: Date,
number: Number,
duration: Number
}
});
这允许使用fetch()
的{{1}}和save()
方法与我的CRUD API无缝集成。
最初,ember-resource
属性为duration
,在我的模板中,我这样做:
null
然后我有一个按钮来添加{{#if acquisition.duration}}
<tr>
<th>{% trans "Duration" %}</th>
<td>{{view Ember.TextField valueBinding="acquisition.duration"}}</td>
</tr>
{{/if}}
属性,如下所示:
duration
因为我正在检查{{#unless acquisition.duration}}
<li><a href="#" {{action addDuration acquisition}}>{% trans "Add duration" %}</a></li>
{{/unless}}
,所以null
阻止在那里,最初{{#if acquisition.duration}}
duration
不会显示。所以我希望用户点击TextField
按钮,这样就可以创建Add duration
。
理想情况下,该字段是空的,但现在我满足于初始值TextField
,只是因为我认为这会更容易。因此,在我的1
中,我正在尝试更新当前的action
对象,以便将acquisition
属性设置为duration
。
答案 0 :(得分:1)
我对你的addDuration
功能感到有些困惑。但看起来你需要调用obj.set('duration', 1);
而不是obj.duration = 1.