【问题标题】:Knockout JS - Observable doesn't update the View on LoadKnockout JS - Observable 不会在加载时更新视图
【发布时间】:2017-09-02 16:05:15
【问题描述】:

首先,我是 Knockout 的新手。有了一些基本的了解。我正在使用 Crossroad 进行路由

这是当前的情况。我从 URL 中获取值作为 param.route().plan。效果不错

然后将 Value 设置为视图模型中的 Observable。但是,当我从上一个使用 location.href = "checkout/gold" 导航到此路线时,绑定不起作用/值不会更新,其中黄金是计划。但是,如果我重新加载页面,它确实可以正常工作。

PS : View 模型按预期工作。我用 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>

【问题讨论】:

  • self 指的是什么?我猜你必须使用self.selectedPlan.subscribe(function(plan){ ... location.href = "#checkout/" + plan; ... })
  • var self = this
  • 您不能在父对象上应用订阅功能。您必须为每个可观察值手动创建单独的订阅函数,您需要观看

标签: javascript knockout.js crossroadsjs


【解决方案1】:

好的,所以得到了答案。也许会帮助某人

在这种情况下使用计算的 observables。这保证在这种情况下具有约束力

var self = this;

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

他们的文档非常先进

【讨论】:

  • firstNamelastNamefullName 与您的问题有什么关系?使用 crossroad.js 的人会如何发现这很有帮助?
  • 我只是举个例子。这个问题与 Crossroads 无关,而是与 Observable 类型有关。
  • 但是如果你解决了,你为什么不简单地发布你的代码呢?这就是这个网站的运作方式。答案必须与问题有关。这个答案是无用的,如果其他人发布了它,你可能会自己投反对票。
猜你喜欢
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 2017-06-04
  • 2019-01-19
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多