0

我想http://demo82.com/lois/api/get_page/?id=6使用 Backbone 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请解释什么是更好的方法?请给我ans using jsfiddle.net. 谢谢

4

2 回答 2

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 回答
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 回答