7

私のコレクションとモデルは次のようになります。

detail_userid = 0;
detail_contactid = 0;
var ContactDetail = Backbone.Model.extend({  
    urlRoot: URL_CONTACTS1+detail_userid+"/"+detail_contactid
});

var ContactDetailCollection =  Backbone.Collection.extend({ 
    model: ContactDetail,
    url: URL_CONTACTS1+detail_userid+"/"+detail_contactid
})

入り口は次のとおりです。

ContactDetailManagePageModel.prototype.init = function(m,n){ 
    detail_userid = m;
    detail_contactid = n;
    var myContactDetails = new ContactDetailCollection();
    var contactDetailListView = new ContactDetailListView({
            collection: myContactDetails
        });     
    myContactDetails.fetch({reset:true});
}

しかし、実行すると、url は :http://localhost:8080/ws/users/contacts/0/0になります。これは、detail_userid と detail_contactid への割り当てが失敗したことを意味します。理由はわかりません。

よろしくお願いします。

4

3 に答える 3

13

PageModel の init を実行する前に、urlRoot および url プロパティを静的に定義していると思います (どこから m および n を取得しているのかよくわかりません...)

url と urlRoot の両方を関数にすることができるため、インスタンス化中にオプションを渡して、モデルに動的に設定することができます。

コレクションの定義と作成をカバーする簡単な例

var ContactDetailCollection = Backbone.Collection.extend({ 
    model: ContactDetail,
    url: function(){
      return URL_CONTACTS1 + this.options.detail_userid + "/" + this.options.detail_contactid;
    }
});

var myContactDetails = new ContactDetailCollection({
  detail_userid: foo,
  detail_contactid: bar
});

前述したように、あなたの init 関数が何をしているのかわかりません。私が心配する必要のない、あなたのアプリのカスタム機能だと思います。

取り除かなければならない主なことは、url と urlRoot を動的に設定することだと確信しています。

于 2013-06-28T09:24:37.310 に答える
7

私はいくつかの発言で受け入れられた答えを満たします。

  1. 初期化時の最初のパラメーターBackbone.Collectionモデルの配列、次にオプションです。オプション付きの空のコレクションを作成するには、次に行う必要があります

    var c = new Backbone.Collection(null, {opt1: val1, opt2: val2});

  2. this.options実際には、url関数内でアクセスすることはできません。モデルのようなオプションはありません。できることは、初期化時にオプションから必要なプロパティを割り当てることです。


initialize: function (models, options) {
    // `parseInt()` is used for consistency that `id` is numeric, just to be sure
    this.detail_userid = parseInt(options.detail_userid);
    this.detail_contactid = parseInt(options.detail_contactid);
}

後で次のようにアクセスできます。

url: function() {
    return URL_CONTACTS1 + this.detail_userid + "/" + this.detail_contactid;
}
于 2015-08-18T20:52:28.560 に答える