ListView 中的 Observable 绑定元素不正确
Observable in ListView binds elements incorrectly
在我的 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 显示 "Item 1" 和 "Item 2",但它显示 "Item 2"、"Item 2"。您可以在此屏幕截图中看到问题:
顺便说一句,当前目标是Android。
请试试这个代码:
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 的扩展 class,因此您无需在创建 observable 数组时创建新的 observable 对象。
问题出在NativeScript的Observableclass定义属性的方式(他们引用了'this'保存在闭包中的副本,并在构造函数中重新定义了属性,所以它们都结束了up 指的是最后一个对象的值)。 that
的引用应在 data/observable/observable.ts 中更改为 this
(安装版本中的 data/observable/observable.js)。我用更改创建了一个 pull request。
在我的 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 显示 "Item 1" 和 "Item 2",但它显示 "Item 2"、"Item 2"。您可以在此屏幕截图中看到问题:
顺便说一句,当前目标是Android。
请试试这个代码:
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 的扩展 class,因此您无需在创建 observable 数组时创建新的 observable 对象。
问题出在NativeScript的Observableclass定义属性的方式(他们引用了'this'保存在闭包中的副本,并在构造函数中重新定义了属性,所以它们都结束了up 指的是最后一个对象的值)。 that
的引用应在 data/observable/observable.ts 中更改为 this
(安装版本中的 data/observable/observable.js)。我用更改创建了一个 pull request。