0

Emberには次のような設定があります。


App.ListObject = Ember.Object.create({
        knownThings: function() {
                var ot = this.openThings.get('content');
                var ct = this.closedThings.get('content');
                var kt = ot.concat(ct);
                var known = Ember.ArrayController.create({content: kt});
                return known;
                }.property(),

    openThings: Ember.ArrayController.create({
        content: []
        }), 

    closedThings: Ember.ArrayController.create({ 
        content: []
    }), 
})

基本的に、既知のものはopenThingsとclosedThingsの組み合わせ配列です。テンプレート内のknownThingsを反復処理する方法がわからないようです。やってるだけ


{{#each App.ListObject.knownThings }}

プロパティにアクセスする必要があるため機能App.ListObject.get('knownThings')しませんが、ひどく間違ったことをしない限り、テンプレートでは機能しません。テンプレート内の他の属性を反復処理すると機能します(開いているものと閉じているもの)

では、テンプレート内のknownThingsをどのように反復しますか?

4

2 に答える 2

3

わずかな変更が必要です...

まず、

knownThings: function() {
  //use get to retrieve properties in ember, Always !
  var ot = this.get('openThings').get('content');
  //var ot = this.get('openThings.content') if you are using latest ember
  var ct = this.get('closedThings').get('content');
  //var ot = this.get('closedThings.content') if you are using latest ember
  var kt = ot.concat(ct);
  var known = Ember.ArrayController.create({content: kt});
  return known;
  //Add dependencies to keep your knownThings in sync with openThings & closedThings if at all they change in future
}.property('openThings', 'closedThings')

ハンドルバーに来ることは使用を繰り返します

//you forgot content property, and in handlebars you don;t need to use get, dot operator is enough
{{#each App.List.knownThings}}

これが機能するかどうか教えてください...

ワーキングフィドルを更新..。

于 2012-11-14T12:34:59.130 に答える
1

あなたが何を言っているのか理解できなかったのでなければ、の代わりにListObject拡張するべきだと思います。また、プロパティがに依存している場合は、である必要があります。ルーターを使用している場合、テンプレートは次のようになります。ルーターを使用していない場合は、を使用します。また、正しくないようで、アクセス方法も間違っています。Em.ArrayControllerEm.Objectcontent.property('content.@each'){{#each thing in controller.knownThings}}{{thin.something}}{{#each item in App.listObject.knownThings}}openThingsclosedThings

私はこの特定のケースのフィドルを書きませんでした。あなたが何をしようとしているのかよくわかりませんが、このフィドル、具体的にApp.ResourcesControllerはテンプレート「resources-view」を見てください。

コントローラ:

// ...
App.ResourcesController = Em.ArrayController.extend({
    content: [],
    categories: ['All', 'Handlebars', 'Ember', 'Ember Data', 'Bootstrap', 'Other'],
    categorySelected: 'All',
    filtered: function() {
        if(this.get('categorySelected') == "All") {
            return this.get('content');                                        
        } else {
            return this.get("content")
                       .filterProperty(
                           "category",
                           this.get('categorySelected')
                       );
        }            
    }.property('content.@each', 'categorySelected'),
    filteredCount: function() {
        return this.get('filtered').length;                                        
    }.property('content.@each', 'categorySelected'),
    hasItems: function() {
        return this.get('filtered').length > 0;
    }.property('filteredCount') 
);
// ...

レンプレート:

<script type="text/x-handlebars" data-template-name="resources-view">
    <h1>Ember Resources</h1>
    {{#view Bootstrap.Well}}
        The following is a list of links to Articles, Blogs, Examples and other types of resources about Ember.js and its eco-system.
    {{/view }}

    {{view Bootstrap.Pills contentBinding="controller.controllers.resourcesController.categories" selectionBinding="controller.controllers.resourcesController.categorySelected"}}
    <i>{{controller.filteredCount}} Item(s) Found</i>
    {{#if controller.hasItems}}
    <ul>
    {{#each resource in controller.filtered}}
        <li>
            <a {{bindAttr href="resource.url" 
                          target="resource.target"
                          title="resource.description"}}>
               {{resource.htmlText}}
            </a>
        </li>
    {{/each}}        
    </ul>
    {{else}}
        {{#view Bootstrap.AlertMessage type="warning"}}
            Couldn't find items for {{controller.categorySelected}}
        {{/view}}
    {{/if}}
</script>
于 2012-11-14T07:20:57.733 に答える