【发布时间】:2012-08-12 15:51:29
【问题描述】:
对于 Asp.net MVC,我有两种观点:
第一个视图:
<div data-role="listview" data-theme="g" id="subcategorieslistview">
<ul data-bind="template: { name: 'subcategory-template', foreach: subcategories }" id="subcategories">
<script type="text/html" id="subcategory-template">
<li data-role="button" data-icon="arrow-r" data-iconpos="right">
<a data-bind="attr : { title : name, categoryid : categoryId, lazyloaddescriptor : lazyLoadDescriptor}"><label data-bind="text: name"></label></a>
</li>
</script>
</ul>
<script type="text/javascript">
$(document).one("pageinit", function () {
<!-- Ajax load of view model --->
</script>
第二个视图:
<div data-role="listview" data-theme="g" id="archivecontainerslistview">
<ul data-bind="template: { name: 'archivecontainers-template', foreach: archivecontainers }" id="archivecontainers">
<script type="text/html" id="archivecontainers-template">
<li data-role="button" data-icon="arrow-r" data-iconpos="right">
<span data-bind="text: name"></span>
<span data-bind="text: synopsis" class="ui-li-count"></span>
</li>
</script>
</ul>
<script type="text/javascript">
$(document).one("pageinit", function () {
<!-- Ajax load of view model --->
</script>
当我转到第一个视图时,模板工作正常。 然后我转到第二个视图,模板再次按预期工作。
但是,当我点击后退按钮返回第一个视图时,我在 knockout.js 中收到错误:
Uncaught Error: Unable to parse bindings.
Message: ReferenceError: synopsis is not defined;
字段 synopsis 位于第二个视图中,通过检查 DOM,我看到两个页面都加载到了我期望从 DOM 中删除第二个页面的位置(不确定错误是否阻止了第二页不会从 DOM 中删除)。
似乎因为当第一页被激活时第二页在 DOM 中,所以即使没有显示第二页,绑定似乎也在第二页中启动。不确定这是否正确。
在 Jquery mobile 或 KnockOut 中是否有任何东西可以以某种方式从第二页中删除绑定,以便我可以避免此错误?
【问题讨论】:
-
如果
archivecontainers为空,则不应应用绑定。是空的吗? -
当我“返回”到第一个视图时,ArchiveContainers 在第二个视图上。所以我认为它仍然会有数据。那么如何在返回第一个视图时清空它呢?
标签: asp.net-mvc jquery-mobile knockout.js