我正在尝试拍摄各种照片,当我拍摄它们时,我希望它们出现在我的视野中 . 我们的想法是将照片对象添加到模型中,该模型是一个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”