私はいくつかのビューに渡す 'ビジネス'コレクションを持っています。バックボーンフェッチは毎回同じモデルを削除して読み込みます
私はthis.business.fetch()を実行するとき、返されるモデルはまったく同じですが、コレクションは返されたモデルが新しいと考えるので 'add'と 'remove' 「新しい」モデルを追加します。私がモデルの間に見ることができる唯一の違いはcidです。
フェッチでコレクションが変更されたと思われるのはなぜですか?それがないにもかかわらず?
これは私のコードです:
router.js
var Router = Backbone.Router.extend({
routes: {
"home": "home",
}
initialize: function() {
this.business = new Business();
this.business.fetch();
},
home: function() {
var homepageView = new HomePageView({business: this.business});
},
。
HomePageView.js
var HomePageView = Backbone.View.extend({
initialize: function (options) {
this.business = options.business;
this.listenTo(this.business, "add", this.onBusinessAdd);
this.listenTo(this.business, "remove", this.onBusinessRemove);
this.listenTo(this.business, "change", this.onBusinessRemove);
this.business.fetch();
},
onBusinessAdd: function(model) {
console.log(model);
},
onBusinessRemove() & onBusinessChange() are the same as onBusinessAdd()
。
collection/business.js
var BusinessCollection = BaseCollection.extend({
initialize : function() {
this.urlRoot = this.path + 'business/me';
this.url = this.path + 'business/me';
this.model = BusinessModel;
}
。
私はアイテムと呼ばれる別のコレクションを持って、それは完全にフェッチします。しかし、いくつかの理由で、私は最初の取出しにbusiness.fetch()を実行すると、それは2つの企業が19 & 20をCID追加し、その後、フェッチ第二に、それはCID 19 & 20を削除し、それがあるにもかかわらず、CID 23 & 24が追加されます同じ
私は私のコンソールで、次を得る:
first fetch: (router.js)
"onBusinessAdd"
n {cid: "c19", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
n {cid: "c20", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
second fetch: (homepageview.js)
"onBusinessRemove"
n {cid: "c19", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
n {cid: "c20", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
"onBusinessAdd"
n {cid: "c23", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
n {cid: "c24", attributes: Object, collection: n, _changing: false, _previousAttributes: Object…}
。 "C19" の 属性== "C23" と "C20" == "C24"
Object {_id: "567b6997a58029fc087b1716", hasLogo: false, approved: false, postcode: "2131", suburb: "1231321"…}
__v : 0
_id : "567b6997a58029fc087b1716"
approved : false
created : 1458794097462
email : "[email protected]"
hasLogo : false
name : "afsaf"
phone : ""
postcode : "2131"
reservationlist : Array[1]
settingsSchema : Array[1]
staff : Array[1]
street : "123132"
suburb : "1231321"
waitlist : Array[1]
。
。
これは、onBusinessAdd関数が呼び出されるたびに何らかの理由でnavbar render()が呼び出され、遅延を引き起こすすべてのrender()でjasny-bootstrap navbarのバグがクローズされるため、問題を引き起こします。
それは、これはアイデンティティの問題であるように私には見えます。モデルは同じだと思うが、バックボーンはそうではない。バックボーンは、同一性(アイデンティティ)をidで決定します。フェッチされたモデルに 'id'プロパティがあることを保証する必要があります。 – 76484
私を正しい道に導いてくれてありがとう!しかし、T Jが言及したように。特にidプロパティを持つ必要はありません。あなたはidAttributeに '_id'を設定することができます – Ta946