2013-11-11 3 views
2

Я новичок в Ember, и я следую вместе со своим учебником Todo и создаю базовое приложение для создания сообщений в блогах, настраивая их код для моих целей. Приложение работало нормально, пока я не добавил элемент ControlController к шаблону и контроллеру для обработки события isCompleted. Вместо показа содержимого, как и раньше, он показывает: <Posts.Post:ember257:1>, который, по-видимому, является именем модели, а не content. Инспектор Ember говорит, что модель имеет правильный атрибут. Он просто не отображается должным образом. Вот код:Содержимое, не отображающее должным образом изображение Ember

<script type="text/x-handlebars" data-template-name="posts"> 
    <section id="postapp"> 
     <section id="main"> 
      <ul id="post-list"> 
       // new code added 
       {{#each itemController="post"}} 
       <li {{bind-attr class="isCompleted:completed"}}> 
        {{input type="checkbox" checked=isCompleted class="toggle"}} 
        <label>{{title}}</label> 
        <p>{{content}}</p> 
       </li> 
       {{/each}} 
      </ul> 
     </section> 
    </section> 
</script> 

И соответствующий JavaScript (см дно в PostController увидеть только изменения после того, как код работал):

Posts.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    content: DS.attr('string'), 
    isCompleted: DS.attr('boolean') 
}); 

Posts.Post.FIXTURES = [ 
    { 
     id: 1, 
     title: "JavaScript: The Dark Side", 
     content: "Here is a bunch of information on the dark side of " + 
      "Javascript. Welcome to hell!" 
    }, 
    { 
     id: 2, 
     title: "The glory of underscore", 
     content: "Here, we're going to talk about the many uses of the " + 
      "underscore library. Read on!" 
    }, 
    { 
     id: 3, 
     title: "Objectifying Objects", 
     content: "Objects are confusing, eh? Let's play around with objects " + 
      "a bit to see how to really use them." 
    } 
]; 

// This is the only code that changed before the app was functioning properly 
Posts.PostController = Ember.ObjectController.extend({ 
    isCompleted: function(key, value){ 
    var model = this.get('model'); 

    if (value === undefined) { 
     // property being used as a getter 
     return model.get('isCompleted'); 
    } else { 
     // property being used as a setter 
     model.set('isCompleted', value); 
     model.save(); 
     return value; 
    } 
    }.property('model.isCompleted') 
}); 

Любое понимание, почему право содержание не отображаемый был бы весьма признателен.

ответ

4

Я только что понял проблему. content - свойство всех контроллеров Ember, поэтому мое имя переменной для содержимого сообщения создавало некоторую путаницу, когда Эмбер показывал страницу. Когда я изменил имя переменной в моей модели и других местах на post_content, контент правильно отображался на странице.

// template 
{{#each itemController="post"}} 
    <li {{bind-attr class="isCompleted:completed"}}> 
     {{input type="checkbox" checked=isCompleted class="toggle"}} 
     <label>{{title}}</label> 
     <p>{{post_content}}</p> 
    </li> 
{{/each}} 

//model 
Posts.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    post_content: DS.attr('string'), 
    isCompleted: DS.attr('boolean') 
}); 

И проблема решена.

+2

Изменение шаблона на '{{content.content}}' тоже сделало бы это –

Смежные вопросы