Javascript ViewModel初始化

时间:2013-11-10 13:34:16

标签: javascript jquery knockout.js

我正在创建SPA,我正在使用knockout js来查看模型。我也使用Sammy js进行路由和导航。

我使用learn.knoutoutjs.com作为如何创建SPA的先行者。在这里,他们将主视图模型作为函数:

function mainViewModel() {
    // insert other view models in here

    Sammy(function () {
       // initialise Sammy routes here
    });
}

我在代码中使用的是对象而不是函数:

var mainViewModel = {
    // insert other view models in here
}

我这样做是出于个人喜好。 ko.applyBindings对此有用处,我在mainViewModel附加了一个不同文件中的视图模型,然后通过淘汰将其绑定。

但是,在处理函数时,它会被初始化并运行,因此Sammy(function () {})被触发。使用var方法,它不会,我如何让它来执行此操作,因为在Sammy(function () {})内它需要使用mainViewModel,但显然它尚未初始化页面加载时。

如何将Sammy放入var方法并让其初始化?

我有这段代码:

var personViewModel = {
   init: function () {
       this.person = ko.observable(new this.personModel({firstname:"callum", lastname:"linington"}));
   },
   personModel: function (data) {
       var self = this;
       self.firstname = ko.observable(data.firstname);
       self.lastname = ko.observable(data.lastname);

       self.fullname = ko.computed(function () {
            return this.firstname + " " + this.lastname;
       }, this);
   },
   person: new Object()
};

然后:

var mainViewModel = {
   init: function () { 
     // do sammy stuff
   },
   personViewModel: personViewModel.init()
}

ko.applyBindings(mainViewModel.init());

但是它说:

  

未捕获的TypeError:无法解析绑定。绑定值:用:   $ root.personViewModel.person消息:无法读取属性   未定义的'personViewModel'

1 个答案:

答案 0 :(得分:1)

    var mainViewModel = {        

            init : function(){    
                    Sammy(function () {
                           // initialise Sammy routes here
                    });
              },    
             anotherMethod1 : function(){},

             anotherMethod2 : function(){}

    }

    mainViewModel.init();