0

我有这个代码:

<ul data-dojo-type="dojox.mobile.RoundRectList">

  <li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback("park"),transition:"slide"'>Park</li>

  <li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback("art"),transition:"slide"'>Art</li>

</ul>

如您所见,使用了calback,它指的是带有参数的特定函数。基本上它不起作用,因为代码总是启动所有回调中的所有函数(控制台日志将一个接一个地显示所有调用)。

如果我这样做:

<li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback,transition:"slide"'>Park</li>

回调工作得很好。一键 -> 一个回调。

那么....如何将参数传递给calback中的js函数?我想要做的是设置一个全局 js 变量值,所以在下一个 dojo 移动视图中(点击后)我可以访问这个变量(并将它用于某些事情,在此处检查位置类型)。

如果无法以这种方式传递参数,那么也许有人知道将变量从一个 dojo 移动视图传递到另一个视图的其他方法(最好使用列表)?

提前感谢您的帮助。

4

2 回答 2

1

您可以看一下 Dojo Mobile Showcase 的一个示例: http://demos.dojotoolkit.org/demos/mobileCharting/demo.html 资源被压缩了一点,所以它们不会给您清晰的画面。无论如何...看起来与您的设置非常相似。具有多个 li-s 的列表视图和一个目标视图。

您可以以编程方式创建 listitem 元素(在创建时附加事件),或者稍后通过向它们添加 id 属性(或使用 dojo 的查询功能)简单地获取它们。

function something(item){
     require(["dojo/dom-attr"], function(domAttr){
          var data = domAttr.get(item,"customattribute");//use your data
          //work with destination view
     });
}

require(["dojo/dom","dojo/on"], function(dom,on){ 
    var item = dom.byId("listitem1");
    on(item,"click", something(item));
});

这只是一个一般的想法,您可以使用 dojo/query 扩展它以一次获取所有列表项,并使用包含您的数据的自定义属性扩展列表项。例如

<li customattribute="data" data-dojo-type="dojox.mobile.ListItem" ...
于 2012-10-22T19:45:27.140 回答
0

这里是:

<li id="park" class="places_around_me_list" data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",transition:"slide"'>Park</li>

<li id="art" class="places_around_me_list" data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",transition:"slide"'>Art</li>


require(["dojo/dom", "dojo/query", "dojo/on", "dojo/dom-attr", "dojo/domReady"], function(dom, dquery, on, domAttr){
    node = dquery(".places_around_me_list");
    on(node, "touchstart", function(e){
        id = domAttr.get(this, "id");
        //console.log("Clicked id:" + id);
        set_placeTypeAroundMe_reference(id);
    });     
});

请注意,在桌面上您需要将事件附加到“单击”,而在移动设备上,此解决方案将与我在下面提到的“回调”具有相同的效果(总是最后运行......)。同样在移动设备上,比如警报会阻止 dojo 移动设备“moveTo”的工作......所以基本上解决方案并不完美。有什么选择吗?

编辑:好的,这里有一个代码也可以在点击移动设备上工作。它似乎完全稳定:

require(["dojo/dom", "dojo/query", "dojo/on", "dojo/dom-attr", "dojo/domReady"], function(dom, dquery, on, domAttr){
    node = dquery(".places_around_me_list");
    dquery(".places_around_me_list").forEach(function(item){
        on(item, "click", function(e){
        id = domAttr.get(item, "id");
        set_placeTypeAroundMe_reference(id);
        });
    });     
});

EDIT2:有时在dojo mobile中,您可能会遇到此错误->在您将手指从触摸屏上移开之前,您可能会启动完全不需要的操作或响应(例如,在您移开手指之前将一个列表替换为新列表)。这应该有助于:

on(item, touch.release, function(e){...}
于 2012-10-23T08:45:36.810 回答