DojoX Mobile ListItem 通过 AJAX 加载 HTML,然后从 DOM 中删除



假设在一个视图中,我有一个DojoX移动列表项,它通过AJAX将HTML视图片段拉入DOM,然后过渡到该视图。假设这一切都工作正常。

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

有没有某种类型的方法可以告诉列表项它需要再次提取 HTML,因为以前提取的内容不再存在?我在任何地方的任何文档中都没有看到任何关于执行此操作的内容。我认为这里真的不需要代码示例,但如有必要,我可以提供一个最小的代码示例。

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

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

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

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

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);

相关内容

最新更新