0

在我的 NativeScript 应用程序中有一个 ListView。我想将一组 Observable 对象绑定到它以单独修改每个项目。然而,NativeScript 似乎为每个 ListView 项绑定了相同的单个项(绑定数组的最后一项)

这是我的布局:

<Page loaded="onPageLoaded">
    <StackLayout orientation="vertical">
            <ListView items="{{items}}">
                    <ListView.itemTemplate>
                            <Label text="{{name}}" />
                    </ListView.itemTemplate>
            </ListView>
    </StackLayout>
</Page>

ViewModel 是这样的:

var observableModule = require("data/observable");
var observableArray = require("data/observable-array");
var viewModule = require("ui/core/view");

var items =  [
    new observableModule.Observable({name:"Item 1"}),
    new observableModule.Observable({name:"Item 2"})
];

var pageData = new observableModule.Observable();
var page;

exports.onPageLoaded = function(args) {
    page = args.object;
    pageData.set("items",items);
    page.bindingContext = pageData;
};

我希望 ListView 显示“项目 1”和“项目 2”,但它显示“项目 2”、“项目 2”。您可以在此屏幕截图中看到问题:

问题截图

顺便说一下,当前的目标是Android。

4

2 回答 2

2

问题在于 NativeScript 的 Observable 类定义属性的方式(它们引用保存在闭包中的 'this' 的副本,并在构造函数中重新定义属性,因此它们最终都引用了最后一个对象的值)。对的引用that应更改为thisdata/observable/observable.ts (已安装版本中的 data/observable/observable.js)。我创建了一个包含更改的拉取请求

于 2015-10-11T13:53:13.697 回答
1

请尝试以下代码:

var items = new observableArray.ObservableArray([]);
var pageData = new observableModule.Observable();
var page;

exports.onPageLoaded = function(args) {
    page = args.object;
    items.push({name:"Item 1"});
    items.push({name:"Item 2"});
    pageData.set("items",items);
    page.bindingContext = pageData;
};

据我所知,observableArray 是 observable 的扩展类,因此您无需在创建 observable 数组时创建新的 observable 对象。

于 2015-08-09T06:55:16.823 回答