2012-12-12 88 views
1

我在Knockout.js中遇到了多個ViewModel的問題。 綁定有效,但當出現應顯示用戶可觀察文本的消息框時,它始終寫入「未定義」。Knockout observables中的多個ViewModel

任何人都知道我的問題是帽子?

<!-- ko template: { 'if': loginVM, data: loginVM } --> 
    <h3>This is the login</h3> 

    User <input type="value: user" type="text"><br/> 
    Password <input type="value: password" type="text"><br/> 
    <button data-bind="click: showDetails">Show Details</button> 
<!-- /ko --> 

<!-- ko template: { 'if': detailsVM, data: detailsVM } --> 
    <h1>These are the details</h1> 
    <button data-bind="click: showLogin">Show Login</button> 
<!-- /ko --> 

    var masterViewModel = { 
     loginVM: ko.observable(), 
     detailsVM: ko.observable() 
    }; 

    var LoginVM = function() { 
     this.user=ko.observable(); 
     this.password= ko.observable(); 
     this.showDetails = function() { 
      alert(this.user()); 
      if(this.user() == "Gregor") 
      { 
       masterViewModel.loginVM(null); 
       masterViewModel.detailsVM(new DetailsVM()); 
      } 

     }; 
    }; 

    var DetailsVM = function() { 
     this.showLogin = function() { 
      masterViewModel.loginVM(new LoginVM()); 
      masterViewModel.detailsVM(null); 
     }; 
    }; 

    masterViewModel.loginVM(new LoginVM()); 

    ko.applyBindings(masterViewModel);​ 

這裏也是一個js.fiddle: http://jsfiddle.net/4A87x/1/

回答

0

你必須綁定一個錯字。應該是:

User <input data-bind="value: user" type="text"><br/> 
Password <input data-bind="value: password" type="text"><br/> 

工作小提琴:

http://jsfiddle.net/4A87x/3/

+0

同樣的是一個更好的結合在這裏,因爲你使用內聯模板反正http://jsfiddle.net/4A87x/6/ – Anders

+0

我現在面臨另一個小問題! 如果我點擊我的DetailsVM中的showStart按鈕,我必須點擊兩次以隱藏DetialsVM! http://jsfiddle.net/4A87x/9/ – Greg

+0

@Greg:我重構了你的代碼。對我來說這種方式似乎更好。它的工作原理。希望它有幫助:http://jsfiddle.net/4A87x/13/ – Stefan