微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

backbone.js – 错误:必须指定一个url属性或函数

这些是我在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({});

fetch方法与服务器通信,它使用url:

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);
},

您没有urlRoot,您没有一个集合来委托URL生成,并且您没有覆盖url,所以urlError()被调用,这是您的错误消息来自哪里.

您的usermodel需要RESTful URL属性函数,以便您可以从服务器获取实例.或者,您可以从客户端环境中已经可用的数据创建模型(只要您不打算通过主干节点保存任何内容).

原文地址:https://www.jb51.cc/js/152117.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐