0

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>

URLは期待どおりに変更されますが、表示または非表示にするすべてのdivは非表示のままであり、現在のdivを表示する単一のデータバインドには何も表示されません。サミールート内にもコンソールログステートメントがありました。これらは期待通りにdivを記録しました。私はおそらく単純なものが欠けています。誰か助けてもらえますか?前もって感謝します!

4

1 に答える 1

2

KnockoutJSでは、次のようにオブザーバブルを更新します。

myViewModel.viewDiv("home")

そして、これは好きではありません

myViewModel.viewDiv = "home"
于 2013-01-04T03:02:06.860 に答える