我正在尝试拍摄各种照片,当我拍摄它们时,我希望它们出现在我的视野中 . 我们的想法是将照片对象添加到模型中,该模型是一个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: "test"}]); 时视图为空 . 中继器无法接收新阵列......
Observable会将属性noteImages上的更改自动传播到UI,还是noteImages应该是ObservableArray本身?
我在这里错过了什么? :) 谢谢
EDIT :取得进展......
似乎如果一个Observable包含属性是数组,那么这些属性必须是 ObservableArray 类型,所以,我的模型现在是:
noteImages:new ObservableArray({src:“image1”},{src:“image2”})
的人
noteImages: [{src: "image1"}, {src: "image2"}]
拍完照片后我做了:
noteViewModel.noteImages.push( {"src":"aaaaaa"} )
我的观点显示了“aaaa”