0

http://demo82.com/lois/api/get_page/?id=6Backbone js を使用して、この API から値を取得したいと考えています。試してみましたが、バックボーンのオブジェクトから値を取得する方法がわかりません。

ここに私のバックボーンコードがあります

Page = Backbone.Model.extend({
initialize: function() {
        this.on('all', function() { console.log(this.get('page')); });
    },
    url: "http://demo82.com/lois/api/get_page/?id=6",
    defaults: {
        "id":null,
        "title":"",
        "content":""
    }
});


 var page = new Page();
 console.log(page.fetch({})); 

私は初心者で、backbonejs を学習しようとしています。より良い方法を説明してください。を使用して私に答えてくださいjsfiddle.net。ありがとう

4

2 に答える 2

0

id常に 6 になりますか? あなたのコードでは、モデルは常に 6 番目のものを取得しています。get パラメーターを使用したカスタム URL が必要な場合はurl、関数としてオーバーライドします。

 url: function() {
      id = this.get("id");
      return "loispage/api/get_page/?id=" + id
 }

さらに良いことに、サーバー側を制御でき、ページ エンティティでもう少し RESTful な処理を実行できる場合は、urlRoot を設定するだけです。

 urlRoot: "loispage/api/page/"

fetch は自動的に HTTP get from を実行します

 "http://.../loispage/api/page/<id>
于 2012-10-30T21:31:05.770 に答える
0

コンテキストの問題のようです (のコールバックthisでモデルを参照していませんon)。これは、コンテキストを指定することで修正できます。

this.on('all', 
    function() { console.log(this.get('pagel')); },
    this
);

編集

クロスドメインの問題もあります。syncparseをオーバーライドして、これには JSONP リクエストを使用する必要があります。(この例から次のコードを適応させました。 )

var Page= Backbone.Model.extend({

// override backbone synch to force a jsonp call
sync: function(method, model, options) {
    // Default JSON-request options.
    var params = _.extend({
      type:         'GET',
      dataType:     'jsonp',
      url:            model.url(),
      processData:  false
    }, options);

    // Make the request.
    return $.ajax(params);
},

parse: function(response) {
    // parse can be invoked for fetch and save, in case of save it can be undefined so check before using 
    if (response) {
        console.log(JSON.stringify(response));
        // here you write code to parse the model data returned and return it as a js object 
        // of attributeName: attributeValue
        return { status: response.status };    // just an example
    }
},

これは JSFiddle のデモです。

于 2012-10-30T21:35:09.477 に答える