0

Я не могу получить «вычисленные» свойства модели. В этом случае я не могу получить свойство commented_byEmber render not shows rails или расчетные свойства Ember

Моя структура приложения довольно проста: у меня есть модель Post, у которой много комментариев. В post.hbs где я отображающий пост, у меня есть раздел, который визуализирует все комментарии, связанные с этой должностью, как так:

 {{#each comment in comments}} 
      {{render "comment" comment}} 
     {{/each}} 

Моего комментарием модель (в Rails) выглядят следующим образом:

class Comment < ActiveRecord::Base 
    extend ActsAsTree::TreeView 

    belongs_to :post 
    belongs_to :user 

    def commented_by 
     self.user.username 
    end 
end 

и это последующий сериализатор выглядит следующим образом:

class CommentSerializer < ActiveModel::Serializer 
    embed :ids, include: true 

    attributes :id, 
       :parent_id, 
       :body, 
       :created_at, 
       :updated_at, 
       :post_id, 
       :user_id, 
       :commented_by 

    belongs_to :post 
    belongs_to :comment 
    has_many :children, include: true, root: :comments 
end 

Поэтому я намерен сериализацией commented_by «вычисленного свойство» и отправить его вместе. Теперь, на клиентской стороне вещей:

Мой уголек комментарий модель выглядит следующим образом:

App.Comment = DS.Model.extend({ 
    parentID: DS.attr('number'), 
    body: DS.attr('string'), 

    createdAt: DS.attr('date'), 
    updatedAt: DS.attr('date'), 

    postID: DS.attr('number'), 
    userID: DS.attr('number'), 

    commentedBy: DS.attr('string'), 

    post: DS.belongsTo('post', {async: true}), 
}); 

Я думаю, маршрут, контроллер и вид может иметь отношение, а также:

App.CommentRoute = Ember.Route.extend({ 
    model: function(params){ 
     return this.store.find('comment', params.id); 
    }, 
}) 

App.CommentView = Ember.View.extend({ 
    templateName: 'comments/comment', 
}); 

App.CommentController = Ember.ObjectController.extend({ 
    testProperty: "hello" 
}) 

Мои поэтому следующие вопросы: 1. (главный вопрос :) Почему свойство commented_by не заполняется на стороне клиента? (консоль на стороне сервера мудрая, она показывает, что она прекрасна.)

Последующие вопросы: 2. Я заметил, что последний звонок сервера, который я получил, был GET/posts/2. Означает ли это, что рендер Ember не делает звонок, чтобы получить комментарии к сообщению? У меня все еще есть комментарии, однако, просто не свойство commented_by (все остальные свойства находятся в базе данных, в столбцах.), Поэтому я могу только догадываться, что Ember не выполняет действие show в comment_controller.rb; если да, то как я правильно сериализую данные, чтобы включить commented_by?

  1. Когда я помещаю отладчик в makeinsertelement commentview и пытаюсь получить «testProperty» контроллера Comment, я получаю нулевое значение. Означает ли это, что рендер не показывает никаких свойств Ember-Controller?

Я знаю, что это ... загруженный вопрос, но я считаю, что я неясен по этим вопросам, и я надеюсь, что кто-то здесь может мне помочь.

ответ

0

Это будет «загружен ответ» ... жаль :(

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

у вас есть два варианта. Либо sideload данных как explained here: http://emberjs.com/guides/models/the-rest-adapter/#toc_sideloaded-relationships.

Или делать то, что известно как «ленивые loading ". Ленивая загрузка в ember немного более продвинутая, но полностью выполнимая (и q uite тривиально, как только он «нажимает»). I have an ember blog example app on github это делает ленивый загрузка. Вы увидите некоторые из связанных с этим проблем (я использовал ember-cli, которые рекомендую )).

Редактировать: Существует большое сообщение в блоге от watsonbox по github, которое я нашел очень полезным при составлении моего предыдущего примера. Я отклонил некоторые из примера в том, что я ввел хранилище непосредственно в свой адаптер и обработал необходимую логику, чтобы не переписывать полные данные с «частичными» данными (читать сообщение для объяснения этого препятствия) на этом более высоком уровне абстракции. Я бы связал его, но переполнение стека не позволит мне из-за моей ограниченной репутации. Поиск google для «emberjs lazy loading» должен сделать его статью лучшим результатом Google.

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

  • Нет связанных вопросов^_^