0

假设在一个视图中,我有一个 DojoX Mobile ListItem,它通过 AJAX 将 HTML 视图片段拉入 DOM,然后转换到该视图。假设这一切正常。

现在,我返回到上面有 ListItem 的初始视图,然后单击其他一些按钮,该按钮从 DOM 中销毁该视图节点。如果我现在单击先前将该视图节点加载到 DOM 中的 ListItem(现在已被删除),它将尝试转换到不存在的视图。它不知道它已被删除。

是否有某种方法可以告诉 ListItem 它需要再次获取 HTML,因为之前获取的内容不再存在?我在任何地方的任何文档中都没有看到任何关于这样做的信息。我不认为这里真的需要代码示例,但如果需要,我可以提供一个最小的示例。

4

2 回答 2

0

我走了一条不同的路线,让视图存在于 DOM 中,并简单地创建了一个函数,将所有敏感数据从视图中清除。

于 2012-06-01T13:20:13.660 回答
0

好的,在这种情况下,我想你可以挂钩 ListItem 容器的 onShow 函数(或任何其他 onchange 事件)。为所述句柄创建一个侦听器,以评估您的项目是否需要重新加载。以下假设是 item.onclick 内容显示 - 而不是包含这些信息的项目标签

或者更好的是,在初始化期间执行所有这些操作,以便使用自定义 onClick 代码扩展您的 ListItem 容器。

看起来很简单,但可能会引入一些怪癖,在哪里/何时/如果您以编程方式更改此项目,但是这里有:

function checkItem() {
    // figure out if DOM is present and if it should be
    if( isLoggedIn() ) {
       this.getChildren().forEach(function(listitem) {
        if( dojo.query("#ID_TO_LOOK_FOR", listitem.domNode).length == 0 ) {
           // this references the listItem, refresh contents.
           // Note: this expects the listitem to be stateful, have no testing environment at time being but it should be
           listitem.set("url", listitem.url);
        }


       });
    }
}

最好将其设置在您的容器构造ListItem

var listItemParent = new dojox.mobile.RoundRectList({
  onShow : checkItem,
  ...
});

或者创建监听器

var listItemParent = dijit.byId('itemRegistryId');
// override onClick - calling inheritance chain once done
dojo.connect(listItemParent, "onClick", listItemParent, checkItem);
于 2012-06-01T14:20:13.960 回答