javascript - 如何使用 Javascript 加载 NSTableView 以实现自动化

标签 javascript automation nstableview osx-yosemite javascript-automation

我想我正处于尝试在 OS X Yosemite 上通过 ScriptEditor 使用 JavaScript 填充 NSTableView 的边缘。我可以显示表格,并且行数设置正确,但实际数据未加载到表格中。

我确实在控制台中看到了这一点:7/24/14 7:47:27.784 AM 脚本编辑器[11708]:* 非法 NSTableView 数据源 ()。必须实现 numberOfRowsInTableView: 和 tableView:objectValueForTableColumn:row:

但是我认为我已经实现了正确的方法。也许我遗漏了一些简单的东西,或者也许 Javascript-Cocoa 绑定(bind)中有一个错误。我看到了 numberOfRowsInTableView 的日志语句,但从未看到 objectValueForTableColumn 的日志语句。

有什么想法吗?

function makeTable() {
tableContainer = $.NSScrollView.alloc.initWithFrame($.NSMakeRect(10, 150, 380, 200));
tableView = $.NSTableView.alloc.initWithFrame($.NSMakeRect(0, 0, 364, 200));

column1 = $.NSTableColumn.alloc.initWithIdentifier("Col1");
column1.setWidth(252);
column1.headerCell.setStringValue("First Name");

column2 = $.NSTableColumn.alloc.initWithIdentifier("Col2"); 
column2.setWidth(198);
column2.headerCell.setStringValue("Last Name");

tableView.addTableColumn(column1);
tableView.addTableColumn(column2);

if($.MyDataSource==undefined) {
    ObjC.registerSubclass({
        name: "MyDataSource",
        protocols: ["NSTableViewDataSource"],
        methods: {
            "numberOfRowsInTableView:": {
                types: ["NSInteger"],
                implementation: function() {
                    console.log("numberOfRowsInTableView called");
                    return 3;
                }
            },
            "objectValueForTableColumn": {
                types: ["id", ["NSTableColumn", "NSInteger"]],                  
                implementation: function(col, row) {
                    console.log("objectValueForTableColumn called")
                    return "Scott"
                }
            }                       
        }
    }); 
}   

tableDataSource = $.MyDataSource.alloc.init;
tableView.setDataSource(tableDataSource);
tableContainer.setDocumentView(tableView);

window.contentView.addSubview(tableContainer);
}

最佳答案

看起来我的 objectValueForTableColumn 行的方法名称错误:

ObjC.registerSubclass({
    name: "MyDataSource",
    protocols: ["NSTableViewDataSource"],
    methods: {
        "numberOfRowsInTableView:": {
            types: ["long", ["id"]],
            implementation: function(id) {
                console.log("numberOfRowsInTableView called", id);
                return 3;
            }
        },
        "tableView:objectValueForTableColumn:row:": {
            types: ["id", ["id", "id", "long"]],                    
            implementation: function(table, column, row) {
                console.log("objectValueForTableColumn called", table, column);
                return "Scott"
            }
        }                       
    }
}); 

关于javascript - 如何使用 Javascript 加载 NSTableView 以实现自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936462/

相关文章:

javascript - 如何自动点击按钮(模拟鼠标点击加载)?

javascript - 从另一个具有值的数组的键创建一个数组

javascript - 降低对象列表之间比较的复杂度 O^2

javascript - 使用表单输入更改单选值

testing - Window defender 想要重置您的设置”-ChromeDriver 2.29 问题 :ChromeBrowser opening with a new tab

cocoa - NSTableView:右键单击行上的蓝色轮廓

cocoa - 基于 View 的 NSTableView viewForTableColumn :row not called

ssh - 如何自动创建 Jenkins SSH 凭据/将其分配给节点?

c# - Windows.Automation 中的 LegacyIAccessible

swift - 以编程方式将列添加到 NSTableView