使用XML构建转发器时,如上例所示,如何在以后更新阵列?
<Repeater items="{{ letras }}" id="rep">
<Repeater.itemsLayout>
<StackLayout horizontalAlignment="center" orientation="horizontal" />
</Repeater.itemsLayout>
<Repeater.itemTemplate>
<Button text="{{ l }}" cssClass="palavraPrincipal" />
</Repeater.itemTemplate>
</Repeater>
我知道如果我在Javascript文件上创建转发器,但是在预先制作的XML转发器上有一种方法可以做到这一点吗?
答案 0 :(得分:1)
要在viewmodel(示例中为letras
数组)中进行更改,请在UI中反映出您需要使用Native Script's data binding。
以下是一个示例,鉴于您的帖子中的XML视图,它将:
我将页面的绑定上下文设置为viewmodel。没有必要在Repeater元素上设置绑定上下文,就像calebeaires在他的示例中那样,因为Repeater将查看页面的绑定上下文。
但是,如果您愿意,可以使用例如2个不同的绑定上下文,1表示页面,1表示Repeater元素。只需替换
page.bindingContext = viewModel;
的
page.getViewById('rep').bindingContext = viewModel;
完整代码:
var observableModule = require("data/observable");
var observableArrayModule = require("data/observable-array");
var viewModel = new observableModule.Observable({
letras: new observableArrayModule.ObservableArray([
{ l: 'First' },
{ l: 'Second' },
{ l: 'Third' },
])
});
function pageLoaded(args) {
var page = args.object;
page.bindingContext = viewModel;
//page.getViewById('rep').bindingContext = viewModel;
// Add a new item every 1 second.
setInterval(function() {
viewModel.letras.push({
l: 'New item'
});
}, 1000);
}
exports.pageLoaded = pageLoaded;
答案 1 :(得分:-1)
了解:
一个。声明和变量:
var repeater;
B中。向转发器声明一个ID:
<Repeater items="{{ items }}" id="rep">
<Repeater.itemTemplate>
<Button text="{{ $value }}" />
</Repeater.itemTemplate>
</Repeater>
℃。在页面加载时重新声明它:
function pageLoaded(args) {
var page = args.object;
repeater = view.getViewById(page, "rep");
page.bindingContext = jogo;
}