1

我认为这只是一个 JavaScript 范围问题。

我正在尝试将一些 Jasmine 测试添加到 Backbone 应用程序,但我无法弄清楚如何从我的 Jasmine 设置中访问 Backbone 模型。

这是我当前的应用程序结构(main.js是我的 Backbone 应用程序):

index.html
js/
  main.js
  vendor/
    backbone.js
    jquery.min.js // etc  
tests/
  SpecRunner.html
  spec/
    testSpec.js

的内容main.js是这样的,一切运行正常index.html

$(function(){
  var Todo = Backbone.Model.extend({
    defaults: function() {
      return {};
    }, 
 ... etc

SpecRunner.html 中的文件如下所示:

  <!-- include source files here... -->
  <script src="/js/vendor/jquery-1.10.2.min.js"></script>
  <script src="/js/vendor/underscore.js"></script>
  <script src="/js/vendor/backbone.js"></script>
  <script src="/js/main.js"></script>

  <!-- include spec files here... -->
  <script type="text/javascript" src="spec/testSpec.js"></script>

我已经在 中编写了这个测试testSpec.js,但它失败了ReferenceError: Todo is not defined

describe("Todo tests", function(){ 
  var todo = new Todo("Get the milk", "Tuesday"); 
  it("should be correctly defined", function(){
    expect(todo).toBeDefined();
  });
  it("should have the correct title", function(){
    expect(todo.title).toBe("Get the milk");
  });
});

如何获得 Todo 范围?我试过window.Todo了,但这也无济于事。

4

1 回答 1

0

正如我们在Backbone 参考中看到的那样。

constructor/initialize new Model([attributes], [options]) 在创建模型实例时,可以传入属性的初始值,这些属性将在模型上设置。

构造函数需要用对象字面量(键值对)来初始化,如下:

new Book({
    title: "One Thousand and One Nights",
    author: "Scheherazade"
});

因此,您需要将代码更改为:

var todo = new Todo({   
                 task: "Get the milk",
                 dayOfWeek: "Tuesday"
           });

更新:

在这里,您在 jquery 函数范围内声明了 Todo,并且您尝试从外部访问。

$(function(){
    var Todo = Backbone.Model.extend({
        defaults: function() {
          return {};
        },
        etc...
    } 
}

您有两个选择,将 Todo 声明为全局,不推荐,但主要用于主干样本:

$(function(){
    window.Todo = Backbone.Model.extend({
        defaults: function() {
          return {};
        },
        etc...
    } 
});

您还可以尝试在声明后调用 jquery 函数:

$(function(){
    var Todo = Backbone.Model.extend({
        defaults: function() {
          return {};
        },
        etc...
    } 
})();
于 2013-11-01T15:20:55.260 回答