这些是我在BackBone.js上工作的最初的日子.我实际上卡在路由器部分,因为我在控制台中收到错误“错误:必须指定一个url属性或函数”.这是我的场景我有一个点击功能动态地形成一个REST URL,并从服务器相应地获取数据.
function onUserClick(obj){ var userID=$(obj).attr('id'); window.location.href="#"+userID+"/"; var userRouter = new UserRouter; }
我在路由器中有以下代码
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); } });
有人可以帮我解决这个问题吗?我知道我在这里做错了,并就此寻求专家意见.对于这种情况的唤醒样本非常感激.
解决方法
你正在调用你的模型抓取:
var UserView = Backbone.View.extend({ model: userModel,initialize: function() { // ... this.model.fetch();
但是你没有给你的模型一个url属性:
var UserModel = Backbone.Model.extend({});
url
model.url()
Returns the relative URL where the model’s resource would be located on the server. If your models are located somewhere else,override this method with the correct logic. Generates URLs of the form:
"/[collection.url]/[id]"
,falling back to"/[urlRoot]/id"
if the model is not part of a collection.
default implementation for a Model’s 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); },
您没有@L_404_2@,您没有一个集合来委托URL生成,并且您没有覆盖url,所以urlError()被调用,这是您的错误消息来自哪里.
您的UserModel需要RESTful URL属性或函数,以便您可以从服务器获取实例.或者,您可以从客户端环境中已经可用的数据创建模型(只要您不打算通过主干节点保存任何内容).