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

时间:2012-05-24 12:43:17

标签: dojo dojox.mobile

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,在这种情况下,我猜你可以挂钩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);