0

我正在尝试使用 knockout.js 和 jquery mobile 编写一个简单的 todo 应用程序。当我只使用敲除(在添加项目时动态替换主页中的文本)时,该代码运行良好。但是,将项目添加到 ko.observableArray 后,jquery mobile 将无法正确呈现。

我可以在一瞬间看到代码正确呈现,然后页面刷新并且不再显示任何列表项。

的HTML:

<div data-role="page">
    <div data-role="header">
        <h1>Lists</h1>
    </div>

    <div data-role="content">
        <ul data-bind="foreach: lists" data-role="listview" data-inset="true">
            <li data-bind="text: name"></li>
        </ul>

        <form data-bind="submit: addList">
            <input data-bind="value: newListName" placeholder="new list name" />
            <button type="submit">Add New List</button>
        </form>
    </div>

    <div data-role="footer" data-position="fixed">
        <h1>Footer</h1>
    </div>
</div>

Javascript:

function List(data) {
    var self = this;
    self.name = ko.observable(data.name);
    self.tasks = ko.observableArray([]);
}

function TaskListViewModel() {
    var self = this;

    self.currentList = ko.observable(new List({ name: "Inbox" }));
    self.newListName = ko.observable('');
    self.lists = ko.observableArray([self.currentList()]);

    self.addList = function() {
        self.currentList(new List({ name: this.newListName() }));
        self.lists.push(self.currentList());
        self.newListName('');
    };
}

更具体地说,我可以看到一个带有“收件箱”的列表项,下面有一个文本字段,然后是一个按钮。当我在字段中输入另一个列表项并单击“添加”时,我可以立即看到正确呈现的所有内容。然后它刷新,我看不到任何列表项。

任何帮助表示赞赏。

4

1 回答 1

1

听起来好像正在提交表单并重新加载页面。在此处尝试解决方法:jquery mobile and knockout form submit binding

于 2012-09-01T14:43:15.093 回答