Javascript变量在Backbone中显示为未定义

时间:2013-03-28 05:00:07

标签: javascript backbone.js

在我的页面顶部,我获取隐藏输入字段的值,将其存储为变量,然后尝试在我的Backbone代码中使用它。但是,该值显示未定义。如何首先获取该字段的值,然后初始化我的骨干应用程序?

<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

2 个答案:

答案 0 :(得分: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);

这最后一个本身不会修复它,你将不得不做更多的工作来在某些时候将令牌传递给实例化的集合。

答案 1 :(得分:1)

您在扩展调用中引用了whitedealsToken,该调用基本上是在脚本运行时执行的。由于whitedealsToken实际上并没有在$(document).ready之前分配一个值,所以在你尝试使用它时它将是未定义的。在为相关变量指定了值之后,您需要将.extend调用调用相同的$(文档).ready block