将属性或选项传递给主干模型

时间:2014-07-16 04:08:28

标签: backbone.js

我没有在模型中获得任何属性或选项。我需要传递路由号码才能建立一个网址。任何人都会看到我失踪了或者我应该怎么做?我尝试在模型上设置我想要的属性,但当我尝试抓住它时,它不在模型中。

视图

define([
'text!html/tplDirection.html',
'models/direction',
'core'
], function (template, Direction) {

return Backbone.View.extend({
    el: '',
    template: _.template(template),
    initialize: function (options) {
        this.model = new Direction();       
        this.model.set({rtnm: options.routeNumber});
        console.log(this.model);
    },
    setup: function (routeNumber) {
        var self = this;
        // self.model.set({rtnm: routeNumber});
        $.when(self.model.fetch())
            .done(function () {
                console.log(self.model.toJSON());               
                self.render();
            })
            .fail(function (response) {
                console.log(response);
                console.log('request for data has failed');
            });         
    },

    render: function () {
    var data = {
        model: this.model.toJSON()
    };
        this.$el.html(_.template(template, data));
    },

模型

define([    
'core'
], function () {

return Backbone.Model.extend({

initialize: function (attributes, options) {       
    console.log(attributes);
},

/*  model: Routes,*/
//url: '/apiproxy.php?method=getdirections&rt=',

  parse: function (data) {
    var parsed = [];
        $(data).find('dir').each(function (index) {
        var dir = $(this).find('dir').text();           
        parsed.push({
            dir: dir,               
        });        
    });
    return parsed;
},

fetch: function (options) {
    options = options || {};
    options.dataType = "xml";
    return Backbone.Model.prototype.fetch.call(this, options);
}
});

});

1 个答案:

答案 0 :(得分:0)

通过在实例化时将选项传递给模型来解决。令我感到困惑的是,它们是作为属性而不是模型中的选项而来的。怎么会?

视图:

    initialize: function (options) {
        this.model = new Direction(options);
    },

模型:

initialize: function (attributes, options) {
    console.log(attributes);

},  
url: function () { 
    //'this' now contains attributes
    var route =  this.get("routeNumber);
    //var route =  this.attributes.routeNumber;
    return '/apiproxy.php?method=getdirections&rt=' + route;      
},