Javascript Appcelerator-自定义TableViewRow中开关的编程切换
我有一个自定义TableViewRow,标题和开关如下: rowFilter.xmlJavascript Appcelerator-自定义TableViewRow中开关的编程切换,javascript,appcelerator,appcelerator-titanium,Javascript,Appcelerator,Appcelerator Titanium,我有一个自定义TableViewRow,标题和开关如下: rowFilter.xml <TableViewRow id="rowFilter"> <View id="vwItemHeader"> <Label id="lblItemHeader"></Label> </View> <View id="vwFilterStatus"> <Switch id="swt
<TableViewRow id="rowFilter">
<View id="vwItemHeader">
<Label id="lblItemHeader"></Label>
</View>
<View id="vwFilterStatus">
<Switch id="swtFilterStatus" onChange="swtFilterStatusChange"></Switch>
</View>
</TableViewRow>
在我调用Browse的视图中,我以编程方式添加这些自定义行,如下所示:
var args = { title: item.title, value: item.value, callback: swtFilterStatusChanged, };
var newRow = Alloy.createController('rowFilter', args).getView('rowFilter');
这正是我们想要的。但是现在我想添加一个check/uncheck all行。如何在自定义行中以编程方式切换开关
我已经尝试在rowFilter.js中创建以下函数(以及用于关闭的类似函数):
我也试过:
$.toggleOn = function() {
}
::编辑::下面是我如何处理选中/取消选中全部开关
function allSwitch_Change(value) {
$.tblFilters.data[0].rows.forEach(function(row) {
if (value) {
row.toggleOn();
}
else {
row.toggleOf();
}
}
}
然后使用以下内容更改上面的Browse.js行,该行不包含Alloy.createController:
var newRow = require('rowFilter');
newRow.initialize(args);
但我只是在require语句中得到了一个异常,它说“找不到模块:体系结构的行过滤器:x86_64”
我做错了什么?如何实现选中/取消选中所有行?您可以这样做: rowFilter.js
var args = arguments[0] || {};
var swtFilterStatusChange_callback;
initialize();
function initialize() {
// Initialize filter row UI
$.lblItemHeader.text = args.title;
$.swtFilterStatus.value = args.value;
// Callback
swtFilterStatusChange_callback = args.callback;
};
var args = arguments[0] || {};
var swtFilterStatusChange;
initialize();
function initialize() {
// Initialize filter row UI
$.lblItemHeader.text = args.title;
$.swtFilterStatus.value = args.value;
// Callback
swtFilterStatusChange = args.callback;
};
$.on('toggleOn',function(){
if ($.swtFilterStatus.value == false) {
$.swtFilterStatus.value = true;
swtFilterStatusChange();
}
});
browser.js
var args = { title: item.title, value: item.value, callback: swtFilterStatusChanged, };
var newRow = Alloy.createController('rowFilter', args);
newRow.trigger('toggleOn');
实现目标的其他选择:
Ti.App.addEventListener
和Ti.App.firevent
。易于实现,但可能存在内存泄漏。确保在删除表行后调用Ti.App.removeEventListener
子项
获取开关视图。手动在其上触发事件swtFilterStatusChanged
的引用存储在某个位置,然后调用它您可以这样做: rowFilter.js
var args = arguments[0] || {};
var swtFilterStatusChange_callback;
initialize();
function initialize() {
// Initialize filter row UI
$.lblItemHeader.text = args.title;
$.swtFilterStatus.value = args.value;
// Callback
swtFilterStatusChange_callback = args.callback;
};
var args = arguments[0] || {};
var swtFilterStatusChange;
initialize();
function initialize() {
// Initialize filter row UI
$.lblItemHeader.text = args.title;
$.swtFilterStatus.value = args.value;
// Callback
swtFilterStatusChange = args.callback;
};
$.on('toggleOn',function(){
if ($.swtFilterStatus.value == false) {
$.swtFilterStatus.value = true;
swtFilterStatusChange();
}
});
browser.js
var args = { title: item.title, value: item.value, callback: swtFilterStatusChanged, };
var newRow = Alloy.createController('rowFilter', args);
newRow.trigger('toggleOn');
实现目标的其他选择:
Ti.App.addEventListener
和Ti.App.firevent
。易于实现,但可能存在内存泄漏。确保在删除表行后调用Ti.App.removeEventListener
子项
获取开关视图。手动在其上触发事件swtFilterStatusChanged
的引用存储在某个位置,然后调用它现在我收到了一条异常消息:“undefined不是一个函数(计算'row.trigger(\“toggleOff\”)”)。查看我的编辑,显示我如何在另一个函数中调用它。不确定这是否重要,但我尝试在创建控制器的单独函数中切换行开关。我的错误。没有看到您在控制器上调用
getView
<代码>触发器是控制器本身的功能。因此,您必须将控制器的引用存储在某个位置,以便以后访问。答案已更新。当我在浏览中存储行控制器数组时,将调用我的切换函数。但是,当我以编程方式切换开关时,UI不会刷新。知道怎么做吗?想出来了。谢谢你的帮助!现在我收到了一条异常消息:“undefined不是一个函数(计算'row.trigger(\“toggleOff\”)”)。查看我的编辑,显示我如何在另一个函数中调用它。不确定这是否重要,但我尝试在创建控制器的单独函数中切换行开关。我的错误。没有看到您在控制器上调用getView
<代码>触发器是控制器本身的功能。因此,您必须将控制器的引用存储在某个位置,以便以后访问。答案已更新。当我在浏览中存储行控制器数组时,将调用我的切换函数。但是,当我以编程方式切换开关时,UI不会刷新。知道怎么做吗?想出来了。谢谢你的帮助!