【发布时间】:2013-07-17 03:08:30
【问题描述】:
我对 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,从登录表单的用户输入中获取服务器IP并发送到服务器进行处理
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? }, });
【问题讨论】:
-
您没有提供任何相关代码。尝试使用静态 url 根,然后重构您的代码,使 url 根成为动态的。您可以使用模型来保存用户凭据和服务器 url。
-
我用相关代码编辑了我的问题。请再检查一次。谢谢!
标签: backbone.js