1

ページの上部で、非表示の入力フィールドの値を取得し、それを変数として保存してから、バックボーン コードで使用しようとしています。ただし、値は未定義と表示されます。最初にフィールドの値を取得してから、バックボーン アプリを初期化するにはどうすればよいですか?

<script>
$(document).ready(function(){

    var whitedealsToken = $('#usertoken').val();
    console.log(whitedealsToken)

    WhiteDeals.initialize();

});
</script>

編集: 以下の完全なバックボーン コード

window.WhiteDeals = {
  Models: {},
  Collections: {},
  Views: {},
  Routers: {},
  initialize: function() {
    new WhiteDeals.Routers.Deals();
    if (!Backbone.history.started) {
        Backbone.history.start();
        Backbone.history.started = true;
    }
  }
};

WhiteDeals.Routers.Deals = Backbone.Router.extend({

 routes: {
            "":   "index"
     },

     index: function() {
       var deals = new WhiteDeals.Collections.Deals();
       var dealsview = new WhiteDeals.Views.DealsIndex({
        el: $('#container')
       });
     }

});

WhiteDeals.Collections.Deals = Backbone.Collection.extend({

  model: WhiteDeals.Models.Deal,
  url: 'http://lvh.me:3000/api/v1/special_deals?access_token=' + whitedealsToken,
  parse: function(response) {
  return response.results;
  },
  // Overwrite the sync method to pass over the Same Origin Policy
  sync: function(method, model, options) {
     var that = this;
     var params = _.extend({
         type: 'GET',
         dataType: 'jsonp',
         url: that.url,
         processData: false
     }, options);

    return $.ajax(params);
  }

 }); // End Collection
4

2 に答える 2

1

whitedealsTokenスクリプトが実行されるとすぐに実行される拡張呼び出しで参照しています。実際には $(document).ready になるまで値が割り当てられないためwhitedealsToken、使用しようとしている場所は未定義になります。問題の変数に値を割り当てた、.extend 呼び出しを同じ $(document).ready ブロック内に配置する必要があります。

于 2013-03-28T07:02:25.690 に答える
1

関数で変数を宣言すると、ローカル スコープでのみ使用できます。したがって、その機能の外には存在しません。

このリンクをチェックしてください: http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx

代わりにグローバルにすることもできます:

whitedealsToken = $('#usertoken').val();  // no var keyword

または、他のグローバル オブジェクトのプロパティにします。

WhiteDeals.whitedealsToken = $('#usertoken').val();

または、それをinitializeメソッドに渡して、次のようにします。

var whitedealsToken = $('#usertoken').val();
console.log(whitedealsToken)

WhiteDeals.initialize(whitedealsToken);

この最後のものだけでは問題は解決しません。ある時点でトークンをインスタンス化されたコレクションに渡すために、さらに作業を行う必要があります。

于 2013-03-28T05:12:12.227 に答える