我对 Backbone 完全陌生,所以请指出正确的方法。这是我所拥有的:
- 具有 3 个输入的主干登录视图:服务器 IP、用户名、密码。我正在根据用户必须早先输入的 serverIP 进行所有验证并将 jquery ajax() 请求发送到我的后端主机。
- 我的后端是使用 Slim restful 框架的 js PHP,检查用户、密码,就像通常的基本东西一样。
- 在成功调用 ajax() 的回调中,我想设置 urlRoot 以供以后使用所有模型和集合,因为我将 Slim 用于所有数据库交互以及位于服务器上的这个 PHP 文件。
我试图在 app.js 中像这样在全局 app 变量上设置它:
var app = {
api_url: '',
views: {},
models: {},
routers: {},
utils: {},
adapters: {}
};
在我设置的登录视图回调中:
app.api_url = "http://"+serverIP;
并尝试在骨干模型 url 中使用 app.api_url 但它显然是未定义的。
可能这不是我正在尝试的正确方法并且我搞砸了变量范围?那么如何从视图中设置 model.url 呢?请,非常感谢任何建议。
谢谢, 洪德
编辑:好的,我将再次尝试详细说明我的问题:
这是我的LoginView.js中的登录功能,基本上它接受用户输入并发送到我的模型以与服务器交互,如果成功导航到主视图:
var user = new app.models.Login(); var userDetails = { serverIP: $('#serverIP').val(), username: $('#username').val(), password: $('#password').val() }; user.save(userDetails, { success: function(data) { /* update the view now */ if(data.error) { // If there is an error, show the error messages } else { // If not, send them back to the home page app.router = new app.routers.AppRouter(); app.router.navigate('home',true); } }, error: function() { /* handle the error code here */ }
这是我的LoginModel.js,从登录表单上的用户输入中获取 serverIP 并发送到服务器进行处理
app.models.Login = Backbone.Model.extend({ urlRoot: function(){ var serverIP = this.get('serverIP'); return "http://"+serverIP+"/api/login"; }, defaults: { 'serverIP': '', 'username': '', 'password': '', } });
现在,成功登录后,导航到HomeView.js,在初始化时调用 EmployeeCollection,到目前为止一切顺利
initialize: function () { //Search result this.searchResults = new app.models.EmployeeCollection(); this.searchResults.fetch({data: {name: ''}}); this.searchresultsView = new app.views.EmployeeListView({model: this.searchResults}); }
这是我遇到问题的EmployeeModel.js,我不知道如何访问 serverIP 变量。
app.models.Employee = Backbone.Model.extend({ urlRoot:"api/employees", //urlRoot: app.api_url+"/api/employees", initialize:function () { this.reports = new app.models.EmployeeCollection(); this.reports.url = app.api_url+'/api/employees/' + this.id + '/reports'; } }); app.models.EmployeeCollection = Backbone.Collection.extend({ model: app.models.Employee, //url: "api/employees", url: function() { //How to get serverIP? }, });