Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Appcelerator-自定义TableViewRow中开关的编程切换_Javascript_Appcelerator_Appcelerator Titanium - Fatal编程技术网

Javascript Appcelerator-自定义TableViewRow中开关的编程切换

Javascript 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,标题和开关如下:

rowFilter.xml

<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不会刷新。知道怎么做吗?想出来了。谢谢你的帮助!