【问题标题】:TodoMVC with backbone and require cannot fetch from serverTodoMVC 与主干和要求无法从服务器获取
【发布时间】:2012-10-04 10:47:42
【问题描述】:

有很多这样的问题。我还没有找到答案。

使用带有backbone.js 和require.js 的示例TodoMVC,我想从服务器而不是本地存储中获取。

我有一个返回正确 json 集合的 url,其中的模型是这样的:

{"string1": "foo", "string2":"bar", "somefloat":0}

在我的模型(model/todo.js)中,我将默认值更改为:

defaults: {string1: '', string2: '',somefloat: 0},

在我的收藏(collections/todos.js)中,我注释掉 localstorage 并添加一个 url。

这使得 fetch 转到我的服务器,我可以看到它返回了 json 集合。

但由于某种原因,模型在主干.js 行 817 中未定义

    // Prepare a model or hash of attributes to be added to this collection.
    _prepareModel: function (model, options) {
        options || (options = {});
        if (!(model instanceof Model)) {
            console.log(Model);
            var attrs = model;
            console.log(attrs.Kana);
            options.collection = this;

            //ERROR IN THIS LINE: Uncaught TypeError: undefined is not a function 
            model = new this.model(attrs, options);

            if (!model._validate(model.attributes, options)) model = false;
        } else if (!model.collection) {
            model.collection = this;
        }
        return model;
    },

为什么我不使用本地存储时模型未定义?

【问题讨论】:

  • 您是否还在函数的集合定义中评论了'lib/backbone/localstorage',?因为据我所知,Backbone Localstorage 只需替换默认的 Backbone.Sync() 函数,因此如果您尝试使用经典的 ajax 方法来获取数据,它将无法正常工作。
  • 感谢您的回复。在集合/待办事项中,我注释掉了 'lib/backbone/localstorage'," 和 localStorage: new Store('todos-backbone'),,然后我插入了 url: '/Practice/GetCollection',。我还尝试将 initialize: function(){this.model = Todo;}, 添加到集合中。没有任何区别。
  • 您是否将urlRoot 属性添加到模型中?应该是:urlRoot:'/Practice/GetCollection'
  • 不,我没有。它起作用了:o) 我想知道为什么我需要使用它。 api 说“如果您使用集合之外的模型,请使用 urlRoot”。我希望一旦我开始更多地使用 todoMVC 示例,它会更有意义。非常感谢英格罗。
  • 不客气!老实说,我不知道为什么需要它(正如你所说的文档没有提到它)但是当我开始使用 Backbone 时我遇到了同样的问题,所以......对于 Backbone,一开始,有些事情并不是很直观,但一旦你习惯了它们,你就会喜欢它。我也将添加答案!

标签: backbone.js model undefined require todomvc


【解决方案1】:

你还需要在你的模型中设置属性urlRoot

var TodoModel = Backbone.Model.extend({

    urlRoot: "/Practice/GetCollection",

【讨论】:

  • 不幸的是,它没有用。问题仍然存在。我不知道我还能提供什么其他信息。 :-(
  • 好的好的。我的错。我将接受 Ingros 解决方案,并添加注释(显然)您还应该从集合的参数列表中删除 Store。
  • 很高兴您找到了解决方案 :)
猜你喜欢
  • 2011-11-14
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2017-12-21
  • 1970-01-01
相关资源
最近更新 更多