【问题标题】:Sammy.js Routing Not Propagating to Knockout.jsSammy.js 路由未传播到 Knockout.js
【发布时间】:2012-12-18 11:50:22
【问题描述】:

我正在尝试获得一个与 Knockout 和 Sammy 一起使用的简单路由机制。虽然我可以让它与 JQuery 一起使用,但我无法让它与 Sammy 和 Knockout 一起使用。这是代码:

$(function() {
    var myViewModel = {
        viewDiv: ko.observable("home") };

    var app = $.sammy(function() {
        this.get("#/", function() { myViewModel.viewDiv = "home";});
        this.get("#/div1", function() { myViewModel.viewDiv = "div1";});
        this.get("#/div2", function() { myViewModel.viewDiv = "div2";});
        this.get("#/div3", function() { myViewModel.viewDiv = "div3";});
    });
    $(function() { app.run("#/") });

    ko.applyBindings(myViewModel);
});

这里是标记:

<div id="main">
    <ul id="link">
        <li><a href="#/div1">Div1</a></li>
        <li><a href="#/div2">Div2</a></li>
        <li><a href="#/div3">Div3</a></li>
        <li><a href="#/">Home</a></li>
    </ul>
    <p>viewDiv:<span data-bind="text: this.viewDiv"></span></p>
</div>
<div id="content">
    <div id="home"  data-bind="visible: this.viewDiv=='home'">
        <h2>Home</h2>
    </div>
    <div id="div1"  data-bind="visible: this.viewDiv=='div1'">
        <h2>First Div</h2>
    </div>
    <div id="div2"  data-bind="visible: this.viewDiv=='div2'">
        <h2>Second Div</h2>
    </div>
    <div id="div3"  data-bind="visible: this.viewDiv=='div3'">
        <h2>Third Div</h2>
    </div>
</div>

网址按预期更改,但我想显示或隐藏的所有 div 都保持隐藏状态,显示当前 div 的单个数据绑定什么也不显示。我在 Sammy 路由中也有控制台日志语句。这些按预期记录了div。我可能缺少一些简单的东西。任何人都可以帮忙吗?提前致谢!

【问题讨论】:

    标签: knockout.js sammy.js


    【解决方案1】:

    在 KnockoutJS 中,我们以这种方式更新 observable:

    myViewModel.viewDiv("home")
    

    不是这样的

    myViewModel.viewDiv = "home"
    

    【讨论】:

    • 非常感谢!这解决了大部分问题!选定的 div 现在显示在

      部分中。我需要处理 HTML 中的数据绑定属性。随着 viewDiv 成为一个函数,它不会为可见绑定评估为真或假。我想我可以弄清楚。但是,当然,如果您有任何想法...

    • 只需要data-bind="visible: viewDiv() == 'home'",你不需要this。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2013-01-22
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多