2014-05-16 25 views
0

我從url獲取數據:/ app/api/assetDetail/{id}其中id是傳遞給設置新assetModel和assetView的演示者的參數。Backbone.js使用來自url的數據設置模型

我正努力在哪裏建立和使用id調用上述網址,然後設置模型。

資產主持人

define([ 
    'text!html/regions/tplAssetPage.html', 
    'views/assetView', 
    'collections/assets', 
    'models/asset' 
], 
function (template, AssetView, Assets, Asset) { 
    return { 
     load: function (params) {     

      $(mv.sections.mainContainer).html(template); 

      var view1 = 'assetView', 
       id = params || ''; 

      this.model = new Asset({      
       wid: params, //sets id on model 
       url: function(){ 
        var url = 'api/assetDetail/' + params; 
        return url; 
        } 
      }); 
      mv.i.views[view1] = new AssetView({ 
       'el': '#asset-container', 
       model: asset 
      }); 
      mv.i.views[view1].setup(); 
     }, 
    }; 
}); 

資產模型

define([], function() { 
return Backbone.Model.extend({ 

    defaults: { 
     id:'' 
    }, 

    initialize: function() {} 

    }); 

}); 

資產視圖

define([ 
'text!html/tplAsset.html', 
'models/asset' 
], function (template, Asset) { 

return Backbone.View.extend({ 

    el: '', 

    template: _.template(template), 

    initialize: function() {}, 

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

    setup: function() { 
     var self = this; 
     $.when(self.model.fetch()) 
      .done(function() { 
       //console.log(self.model.toJSON()); 
       self.render(); 
      }) 
      .fail(function() { 
       console.log('request for data has failed'); 
      }); 

       }, 

    events: {}, 
    }); 
}); 

現在收到這些錯誤: ERR:路由錯誤錯誤: 「URL」 屬性或功能必須指定

at Backbone.View.extend.setup (/js/views/assetView.js:36:22) 
    $.when(self.model.fetch()) 
at Object.load (/js/presenters/asset.js:34:23) 
    mv.i.views[view1].setup(); 

回答

1

要在模型實例動態設置模式網址:

var asset = new Asset({     
     wid: params, //sets id on model 


     url: function(){ 
      var url = '/app/api/assetDetail/' + this.id; 
      return url; 
     } 
    }); 

然後,你已經設置了網址後,做asset.fetch()

注意,它將會是與任何通信的URL該模型實例的服務器(savefetch)。如果您需要更大的靈活性,您需要調整模型的Bacbkone sync方法。

UPDATE:

一旦你獲取你想要的模型數據,您則可以調用渲染功能:

render: function() { 
    this.$el.html(this.template(this.model.toJSON())); 
    return this; 
} 

在模板這將然後渲染模型數據。如果您使用下劃線模板,它看起來就像: <p>some html<span> <%= data %> </span><p>

如果你想查詢你已經賺得了什麼,不要忘記,fetch接受成功和錯誤回調:http://backbonejs.org/#Model-fetch

+0

我應該在哪裏打電話資產。取()?在Presenter之前或之後我調用setup()或在我的assetView setup()函數中? – Anthony

+0

這取決於你在'setup()'函數中做了什麼 - 如果你需要從服務器獲取數據,那麼你可以執行setup函數。如果你不這樣做,那麼你可以把'asset.fetch()'放在assetView初始化函數中。 –

+0

Gotcha。那麼在我的模型實例中調用該url,是否也會將返回的數據設置爲模型?如果不是,我該怎麼做? – Anthony

相關問題