0

私はいくつかのビューに渡す「ビジネス」コレクションを持っています。

this.business.fetch() を実行すると、返されるモデルはまったく同じですが、コレクションは返されたモデルが新しいと見なされるため、イベント「追加」および「削除」がトリガーされ、「古い」が削除され、「新しい」モデル。モデル間で私が見ることができる唯一の違いは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() を実行すると、cid 19 と 20 の 2 つのビジネスが追加され、2 回目のフェッチで 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 : "f@f.com"
hasLogo : false
name : "afsaf"
phone : "0123456789"
postcode : "2131"
reservationlist : Array[1]
settingsSchema : Array[1]
staff : Array[1]
street : "123132"
suburb : "1231321"
waitlist : Array[1]

.

.

onBusinessAdd 関数が呼び出されるたびに navbar render() が呼び出され、何らかの理由で jasny-bootstrap navbar がバグを起こし、render() ごとに自分自身を複製し、ラグが発生するため、これは問題を引き起こします。(最初にこの問題を修正した後、それを調べる必要があります)

4

1 に答える 1

0

idあなたの応答には属性がないようですが、_id代わりにプロパティがあります。

を送信するか、オプションを使用してモデルの追跡idに使用するようにバックボーンに通知する必要があります。_ididAttribute

公式ドキュメントの例には、次の_idものもあります。

var Meal = Backbone.Model.extend({
  idAttribute: "_id"
});
于 2016-04-04T11:35:50.407 に答える