在我的路由器,我這樣做:如何修改Emberjs控制器中的對象,以便更新視圖?
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
}
});
這允許無縫集成與我的CRUD API,與ember-resource
的fetch()
和save()
方法。
最初,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
屬性設置爲1
。
我已經添加了一個大的編輯,其中我解釋了'addDuration'函數並顯示更多的代碼。不幸的是,你的建議不起作用,因爲'obj'沒有'set'方法。 –
它不適合我的原因是我沒有使用模型,而只是資源。我編寫了一個模型,並將它連接到資源,現在'set'方法起作用。 –