2016-04-03 1 views
1

Я хотел бы связать значение, присутствующий в моей app.js вид-модели в пользовательский элемент, но я не могу показаться, чтобы получить bind, чтобы работать должным образом, когда значение images устанавливается из Promise.Как связать модель представления приложения с пользовательским элементом с помощью обещания?

app.js:

@inject(Api) 
export class App { 
    constructor(api) { 
     this.api = api; 
    } 

    . . . 

    activate() { 
     this.api.mockGet('gallery').then((images) => this.images = images); 
    } 
} 

Мой пользовательский элемент, как указано в app.html: вид-модель

<featured-image images.bind="images"></featured-image> 

мой пользовательский элемента, featured-image.js:

import {containerless, bindable} from 'aurelia-framework'; 

@containerless 
export class FeaturedImage { 
    @bindable images = null; 

    attached() { 
     console.log(this.images); 
    } 
} 

this.images всегда undefined. Если я установил images в жестко закодированный массив, он будет работать как ожидалось. Что я делаю не так?

ответ

3

Попробуйте вернуть обещание в activate:

activate() { 
    return this.api.mockGet('gallery') 
     .then((images) => this.images = images); 
} 

Это гарантирует, что ваше мнение будет активировать, когда обещание было завершено. Однако я думаю, что он должен работать даже без return, потому что любые изменения в массиве будут распространяться на все виды, которые его связывают. Возможно, другое дело вызывает проблему.

+1

Очень интересно. Это работает, но я хотел бы понять, почему. Есть ли ссылка в документах? – Brandon

+0

Да, есть. http://aurelia.io/docs.html#/aurelia/framework/1.0.0-beta.1.1.4/doc/article/cheat-sheet/7 «Реализовать этот крючок, если вы хотите выполнить пользовательскую логику непосредственно перед вашим отображается модель просмотра. Вы можете по желанию вернуть обещание сообщить маршрутизатору, что он ждет, чтобы привязать и прикрепить представление до тех пор, пока вы не закончите свою работу ». –

+0

Дерп - большое спасибо за помощь! Я ценю это. – Brandon