私のルーターでは、これを行います:
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()
and関数は正常にremove()
機能し、ビューが更新されます。
ただし、テンプレートからを呼び出すaddDuration
と{{action}}
、関数が実行されてオブジェクトが保存されますが、ビューは更新されません。
アウトレットを設定したので、どういうわけかコントローラーのプロパティを観察していると思いました。アイテムを追加したり削除したりすると観察されているように見えますが、内部のアイテムが変更されたときは観察されていません。all
content
どうすれば問題を解決できますか?
編集
ここに何をすべきかについての少しの説明がaddDuration
あります。
私はember-resourcemodel
を使用しているので、次のように、の代わりに、を使用resource
します。
var Acquisition = Ember.Resource.define({
url: '/images/api/acquisition',
schema: {
id: String,
date: Date,
number: Number,
duration: Number
}
});
これにより、CRUD API、fetch()
およびsave()
のメソッドとのシームレスな統合が可能になります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
1