私はバックボーンにまったく慣れていないので、正しい方法を教えてください。ここに私が持っているものがあります:
- 3 つの入力を持つバックボーン ログイン ビュー: serverIP、ユーザー名、パスワード。私はすべての検証を行っており、ユーザーが以前に入力しなければならなかった serverIP に基づいて、バックエンド ホストに jquery ajax() リクエストを送信しています。
- 私のバックエンドは、Slim restful フレームワークを使用した js PHP です。通常の基本的なものと同様に、ユーザーとパスワードを確認します。
- 成功した ajax() 呼び出しのコールバックで、すべてのモデルとコレクションを後で使用するために urlRoot を設定します。これは、すべてのデータベース インタラクションとサーバー上にあるこの PHP ファイルに Slim を使用しているためです。
app.jsで次のようにグローバルアプリ変数に設定しようとしました:
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? }, });