2017-04-07 77 views
-1

首先,我是Knockout的新手。有一些基本的瞭解。我正在使用Crossroad進行路由Knockout JS - Observable不會更新加載視圖

這是當前場景。我從URL獲取值爲param.route()。plan。它確實工作正常

然後將值設置爲視圖模型中的Observable。但是,綁定不起作用/當我從前一個使用location.href =「checkout/gold」導航到此路由時,值不會更新,其中gold是計劃。但是,如果我重新加載頁面,它確實工作正常。

PS:視圖模型確實按預期工作。我一倍的console.log

現在證實了一些代碼 - 該函數重定向到這似乎工作問題的視圖模型

// Function Handling Subsription 
     self.subscribe = function() { 
      alert(self.selectedPlan()); 
      var currentUser = Parse.User.current(); 
      if (currentUser === null) { 
       $('#loginBox').modal('show'); 
      } else { // Else redirect 
       location.href = '#checkout/'+self.selectedPlan(); 
       // Redirect to Checkout page 
      } 
     } // Function ends here 

視圖模型

self.selectedPlan = ko.observable(params.route().plan); 

查看

<span data-bind="text:selectedPlan()></span> 
+0

是什麼'self'指什麼?我想你必須使用'self.selectedPlan.subscribe(function(plan){... location.href =「#checkout /」+ plan; ...})' –

+0

var self = this –

+0

你不能申請訂閱功能在父對象上。您需要手動爲每個可觀察值創建單獨的訂閱功能,您需要觀看 – Rajesh

回答

-2

好吧,所以得到了答案。也許會幫助別人

在這種情況下使用計算的observables。這保證了在這些情況下,結合

var self = this; 

    self.firstName = ko.observable('Bob'); 
    self.lastName = ko.observable('Smith'); 
    self.fullName = ko.computed(function() { 
     return self.firstName() + " " + self.lastName(); 
    }); 

他們的單證是相當向前

+0

'firstName','lastName'或'fullName'與您問題中的問題有什麼關係?任何使用crossroad.js的人都會覺得這有幫助嗎? – Tomalak

+0

我只是舉了一個例子。這個問題與Crossroads無關,而與Observable類型有關。 –

+0

但是,如果你解決了它,你爲什麼不簡單地發佈你的代碼?這就是這個網站的工作原理。答案必須要對問題做些什麼。這個答案是無用的,如果有人發佈了它,你可能會自己冷靜下來。 – Tomalak

相關問題