使用knockout和jquery的可折叠菜单

时间:2013-10-31 18:41:55

标签: jquery knockout.js

我正在尝试使用knockout和jquery构建一个简单的可折叠菜单。但由于某种原因,jquery没有被激活。

脚本位于jsfiddle

    <ul id="usernav" data-bind="template: { name: 'seasonTemplate', foreach: seasons, as: 'season' }"></ul>

<script type="text/html" id="seasonTemplate">
    <li>
        <strong data-bind="text: name"></strong>
        <ul data-bind="template: { name: 'monthTemplate', foreach: months, as: 'month' }"></ul>
    </li>
</script>

<script type="text/html" id="monthTemplate">
    <li>
        <span data-bind="text: month"></span>
        is in
        <span data-bind="text: season.name"></span>
    </li>
</script>

脚本是

        var viewModel = {
        seasons: ko.observableArray([
            { name: 'Spring', 
             months:[ 'March' , 'April', 'May'  ]},
            { name: 'Summer', months: [ 'June', 'July', 'August' ] },
            { name: 'Autumn', months: [ 'September', 'October', 'November' ] },
            { name: 'Winter', months: [ 'December', 'January', 'February' ] }
        ])
    };
    ko.applyBindings(viewModel);

$('#usernav').find('ul').hide();

$('li').click(function(e) {
    $(this).children('ul').toggle();
    e.stopPropagation();
});

修改: -  所以是的,我可能忘记在复制粘贴时将jquery库包含在原始jsfiddle文章中,但这不是我的问题。我创建了一个关于我的问题here的单独问题 谢谢!

2 个答案:

答案 0 :(得分:1)

对于仍然面临这个问题的人来说,使用jquery mobile和knockoutjs来获得ui是正确的,你必须在重新分配observablearray之后强制刷新。

$('.selector').collapsibleset('refresh');

答案 1 :(得分:0)

首先帮助我们帮助您更新您的jsFiddle。

如果这不是你的答案,我会自己删除它,但是,修复jquery库使你的代码工作,所以这可能是一个答案(原文如此)。

screen capture of jsfiddle libraries

在jsFiddle上,更新你的javascript库和ADD jquery。

Your resulting jsFiddle