私は ember.js RC1 + ember-data rev 11 を使用しています (ただし、モデルのような構成には単純な ajax も必要です)。単純なオブジェクト リストをループしてレコードを表示したい (注 - ここでは基本的な配列のみを作成します)
バインドしたコンテンツには、次のカスタム検索メソッドが定義されています
App.Foo = DS.Model.extend({
name: DS.attr('string')
}).reopenClass({
records: [],
all: function() {
return this.records;
},
find: function() {
var self = this;
$.getJSON('/api/foo/', function(response) {
response.forEach(function(data) {
//say I want to kill everything in the array here for some strange reason...
self.records = [];
//the template still shows the record ... not an empty list ?
}, this);
});
return this.records;
}
});
私の他のモデルはこれを直接使用しています
App.Related = DS.Model.extend({
listings: function() {
return App.Foo.find();
}.property()
});
今私のテンプレートの中に
{{#each foo in related.listings}}
{{foo.name}}<br />
{{/each}}
リストには、デフォルトで配列に入れたものがすべてロードされます (たとえば、createRecord を使用して単純なオブジェクトを追加するとします)。
add: function(record) {
this.records.addObject(App.Foo.createRecord(record));
},
テンプレートがレンダリングされると、ここにリストされているものが表示されます...しかし、上記のコメントにあるように、レコードを削除するか、バインドされているリストをnullにすることにした場合、これはまったく反映されないようです。
私が持っているように単純な配列をバインドし、スプライスなどの基本的なものを使用してアイテムを削除することは可能ですか? または思い切った self.records = []; ?
self.records.splice(i, 1);
スプライスまたは空の作業の後にクライアントに手動でクエリを実行しても、0 が返されます
console.log(App.Foo.all().get('length'));
最初はレコードが表示されますが、その後、それらがなくなっていることがわかります (まだ html は変更されません)。