我正在使用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部分有关。它无法从服务器获取值。任何想法?
答案 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应用离线工作