我有这段代码:
<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,它引用了带参数的specyfic函数。基本上它不起作用因为代码总是启动所有回调中的所有函数(控制台日志将一个接一个地显示所有调用)。
如果我这样做:
<li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback,transition:"slide"'>Park</li>
calback工作得很好。一键 - &gt;一个回调。
那么....我怎样才能将参数传递给calback中的js函数? 我想要做的是设置一个全局的js变量值,所以在下一个dojo移动视图中(点击后)我有权访问这个变量(并使用它来做某事,在这里检查地点类型)。
如果以这种方式传递参数是不可能的,那么也许有人知道将变量从一个dojo移动视图传递到另一个(最好是使用列表)的其他方法吗?
提前感谢您的帮助。
答案 0 :(得分:1)
你可以看看Dojo Mobile Showcase的一个例子: http://demos.dojotoolkit.org/demos/mobileCharting/demo.html Soruces被压缩了一点,所以它们不会给你清晰的画面。 无论如何... 看起来非常类似于您的设置。列出具有多个目标视图的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对其进行扩展,以一次获取所有列表项,并使用包含数据的自定义属性扩展列表项。 e.g。
<li customattribute="data" data-dojo-type="dojox.mobile.ListItem" ...
答案 1 :(得分: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中你可能会遇到这个错误 - &gt;在您从触摸屏上拿走手指之前,您可以启动完全不需要的操作或响应(例如,在您将手指移开之前,将一个列表替换为新列表)。这应该有所帮助:
on(item, touch.release, function(e){...}