Dip*_*nan 10 backbone.js underscore.js backbone-routing backbone-model
这是我在BackBone.js上工作的最初时期.我实际上卡在路由器部分,因为我在控制台中收到错误"错误:必须指定url属性或函数".这是我的情景; 我有一个动态形成REST URL的点击功能,并相应地从服务器获取数据.
这是点击功能代码
function onUserClick(obj){
var userID=$(obj).attr('id');
window.location.href="#"+userID+"/";
var userRouter = new UserRouter;
}
Run Code Online (Sandbox Code Playgroud)
我在路由器中有以下代码
var userModel;
var UserRouter = Backbone.Router.extend({
routes:{
":userid/":"getUsers"
},
getUsers:function(userid){
var url="http://myserver.com/users/"+userid;
userModel = new UserModel({urlRoot:url});
var userView = new UserView({el:$(#"container")});
}
});
var UserModel = Backbobe.Model.extend({});
var UserView = Backbone.View.extend({
model:userModel,
initialize:function(){
_.templateSettings = {
interpolate: /\{\{\=(.+?)\}\}/g,
evaluate: /\{\{(.+?)\}\}/g
};
this.model.fetch();
this.model.bind("change",this.render,this);
},
render:function(){
var data=this.model.toJSON();
var userTemplate=_.template($("#userTemplate").text());
var htmlData=userTemplate({
"userData":data
});
$(this.el).html(htmlData);
}
});
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?我知道我在这里做错了什么,并就此寻求专家意见.非常感谢这种情况的一个woking样本.
mu *_*ort 22
你在呼唤fetch你的模特:
var UserView = Backbone.View.extend({
model: userModel,
initialize: function() {
// ...
this.model.fetch();
Run Code Online (Sandbox Code Playgroud)
但是你没有给你的模型一个url属性:
var UserModel = Backbone.Model.extend({});
Run Code Online (Sandbox Code Playgroud)
该fetch方法与服务器通信,它用于url执行此操作:
网址
model.url()返回模型资源在服务器上的相对URL.如果模型位于其他位置,请使用正确的逻辑覆盖此方法.生成以下形式的URL:如果模型不是集合的一部分,则
"/[collection.url]/[id]"返回"/[urlRoot]/id".
在对模型的默认实现url如下所示:
url: function() {
var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id);
},
Run Code Online (Sandbox Code Playgroud)
你没有urlRoot,你没有一个集合来委派URL生成,你没有被覆盖url所以urlError()被调用,这就是你的错误信息来自哪里.
您UserModel需要一个RESTful url属性或函数,以便您可以fetch从服务器中获取实例.或者,您可以根据客户端环境中已有的数据创建模型(只要您不打算通过Backbone保存任何内容).