我正在尝试拍摄各种照片,当我拍摄它们时,我希望它们出现在我的视野中。 我们的想法是将照片对象添加到模型中,该模型是一个Observable,并在视图中使用Repeater显示它们。
请注意,我只是为了调试它而不是图像对象,而是向 noteImages 添加一个简单的字符串。
我拥有的是:
视图模型:
function NoteViewModel(info) {
info = info || {};
var viewModel = new Observable({
id: info.id || null,
title: info.title || "title default",
description: info.description || "description default"
noteImages: [{src: "xxxx"}, {src: "yyyyyy"}]
});
return viewModel;
}
"控制器":
...
var noteViewModel = new NoteViewModel();
exports.loaded = function(args) {
console.log("Loading note view...")
page = args.object;
page.bindingContext = noteViewModel;
};
...
exports.takePhoto = function(){
cameraModule.takePicture({width: 300, height: 300, keepAspectRatio: true}).then(function(imageSource) {
var image = new imageModule.Image();
image.imageSource = imageSource;
noteViewModel.mainImage = imageSource;
// noteViewModel.noteImages.push( {"src": "test"} );
noteViewModel.noteImages.set([{src: "test"}]);
}
观点:
<Page loaded="loaded">
<Page.actionBar>
<ActionBar title="New note"></ActionBar>
</Page.actionBar>
<StackLayout>
<Repeater items="{{ noteImages }}">
<Repeater.itemTemplate>
<Label text="{{ src }}" />
<!-- <Image src="{{ src }}" /> -->
</Repeater.itemTemplate>
</Repeater>
</StackLayout>
</Page>
注意:我知道我应该将imageSource添加到图像数组中,但出于测试目的,我只想看到另一个项目添加到noteImages并由转发器显示...
初始noteImages由转发器显示,所以我猜bindingContext正在按预期工作。问题是,当相机返回其imageSource并且我执行 noteViewModel.noteImages.set([{src:&#34; test&#34;}]); 时,视图为空。中继器无法接收新阵列......
Observable应该将属性noteImages上的更改自动传播到UI还是noteImages应该是一个ObservableArray本身?
我在这里缺少什么? :) 感谢
编辑:取得进展......
似乎如果一个Observable包含属于数组的属性,这些属性必须是 ObservableArray 类型,所以,我的模型现在是:
noteImages:新的ObservableArray({src:&#34; image1&#34;},{src:&#34; image2&#34;})
的内容
noteImages: [{src: "image1"}, {src: "image2"}]
拍完照片后我做了:
noteViewModel.noteImages.push( {"src":"aaaaaa"} )
我的观点显示了&#34; aaaa&#34;