Knockout.js网址路由

时间:2012-02-11 18:27:10

标签: knockout.js sammy.js

我做了我的第一个knockout.js申请http://jsfiddle.net/Pqs7e/

对于显示应用程序部分(书籍部分,关于部分)我使用jquery $(“#id”)。show()。我觉得这不是正确的方法。我怎么能通过viewmodel的机制来做到这一点?

2 个答案:

答案 0 :(得分:4)

我会使用特殊的 state observable来识别哪个div显示:

function ViewModel(){
    var self = this;
    self.state = ko.observable();
    ...
}

然后你就像这样绑定它:

<div id="books" data-bind="visible: state() === 'books'>...</div>
<div id="about" data-bind="visible: state() === 'about'>...</div>

并在这样的状态之间切换:

this.get('#books', function() {
    self.state("books");
});

this.get('#about', function() {
    self.state("about");
});

答案 1 :(得分:4)

另一种方法是使用模板:

<div data-bind="template: state">
    Template renders here
</div>

然后你的部分可以在这样的地方定义(在同一个文件或其他地方):

<script id="books" type="text/html">
   Your markup here...
</script>

<script id="about" type="text/html">
   Your markup here...
</script>