2017-04-07 33 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