Backbone.js在离线应用程序中

时间:2011-08-03 07:09:09

标签: javascript backbone.js

我正在使用Titanium使用网络技术构建桌面应用。我决定使用Backbone.js作为我的mvc。问题是应用程序不在服务器上运行。这是我的Backbone模型和集合:

     window.Student = Backbone.Model.extend({
        initialize: function(){
            this.bind("save", this.value_change);
        },
        value_change: function(){
            alert("Student model saved for : " + this.attributes.first_name);
        },

        urlRoot : http://localhost:8080/student/,
    });

    window.Students = Backbone.Collection.extend({
        model: Student,
        url: 'http://localhost:8080/students/',
    });

并尝试使用

从服务器获取值
var students = new Students  
students.fetch() 

我收到此错误:

message: "'undefined' is not an object (evaluating '$.ajax')"  

我假设这与url部分有关。它无法从服务器获取值。任何想法?

4 个答案:

答案 0 :(得分:2)

问题是服务器上的骨干保存模型。它通过向您的服务器发送ajax请求来实现此目的。你想要做的是覆盖持久性机制

使用backbone.localStorage在localStorage中保存状态,而不是数据库

答案 1 :(得分:0)

collection.fetch()会在集合上触发reset事件,而不是save事件。当您希望在服务器上保留实例模型时,Save是一种向服务器执行POST请求的Model方法。

你应该试试这个:

window.Student = Backbone.Model.extend({
});


window.Students = Backbone.Collection.extend({
    model: Student,
    url: 'http://localhost:8080/students/',

    initialize: function(){
        this.bind("reset", this.value_change);
    },
    value_change: function(){
        alert("Students fetched ");
    },
});

var students = new Students();
students.fetch();

当你说

时,我不确定你的意思
  

问题是应用程序不在服务器上运行

但是如果你的javascript没有和你的服务器在同一个域上运行,你可能会遇到一些跨域的javascript问题......这里有一个使用Ruby on Rails的例子:http://www.tsheffler.com/blog/?p=428

答案 2 :(得分:0)

感谢您的所有答案。在骨干后加载jquery的问题。我首先加载了jquery,它运行得很好。感谢#documentcloud的irc的parshap。

答案 3 :(得分:0)

尝试https://github.com/Ask11/backbone.offline

允许您的Backbone.js应用离线工作