2013-09-03 2 views
1

Я хочу реализовать систему, которая покажет мне новейшие сообщения. Для этого я не хочу использовать действие индекса от пользователя, поскольку это уже сделано для другой функции post, но является «новейшим» действием. Он отображается на указательном маршруте с вызовом {{ render "postNewest" }}. Я бы предпочел загружать данные в PostNewestController или PostNewestView вместо маршрута для абстракции. Я попробовал две идеи, чтобы добиться этого, но никто не работал до сих пор:Загрузить данные с контроллера в ember.js

  • создания пользовательского адаптера и добавить метод findNewest(): метод findNewest(), к сожалению, не нашли при попытке вызова в методе инициализации контроллера ,

  • написать запрос непосредственно в метод init, а затем обновить с помощью store.loadMany(payload): данные являются успешными. Однако я не знаю, как получить доступ к данным из шаблона и установить содержимое контроллера.

Есть ли способ для этого?

EDIT:

Вот исходный код, чтобы лучше понять проблему:

PostModel.js

App.Post.reopenClass({ 
    stream: function(items) { 
     var result = Ember.ArrayProxy.create({ content: [] }); 
     var items = []; 
     $.getJSON("/api/v1/post/stream?auth_token=" + App.Auth.get("authToken"), function(payload) { 
      result.set('content', payload.posts); 
     }); 
     return result; 
    } 
}); 

PostStreamController.js

App.PostStreamController = Ember.ArrayController.extend({ 
    init: function() { 
     this.set("content", App.Post.stream()); 
    }, 
}); 

index.hbs

{{# if App.Auth.signedIn}} 
    {{ render "dashboard" }} 
{{else}} 
    {{ render "GuestHeader" }} 
{{/if}} 

{{ render "postStream" }} 

postStream.hbs

{{#each post in model}} 
    <li>{{#linkTo 'post.show' post data-toggle="tooltip"}}{{post.name}}{{/linkTo}}</li> 
{{else}} 
    Nothing's there! 
{{/each}} 

PostShowRoute.js

App.PostShowRoute = Ember.Route.extend({ 
    model: function(params) { 
     return App.Post.find(params.post_id); 
    }, 
    setupController: function(controller, model) { 
     controller.set('content', model); 
    }, 
}); 

ответ

1

Я понял, что проблема. Модель Post имеет отношение к другой модели. Это отношение не загружается Ember, поэтому в методе stream() мне нужно загрузить это вручную. Тогда все работает так, как ожидалось.

1

Я бы этот вопрос тоже. Просто добавьте init в свой контроллер и определите модель, которую вы хотите туда добраться.

в контроллере

App.PostRecentController = Ember.ArrayController.extend({ 
    init: function() { 
    return this.set('content', App.Post.find({ 
     recent: true 
    })); 
    } 
}); 

В шаблоне

{{#each post in content}} 
    {{post.body}} 
{{/each}} 

Я бы порекомендовал вам проверить Ember РАСШИРЕНИЕ, это даст вам хорошее представление о наименовании, и посмотреть, если все отсутствует.

+0

Прежде всего, спасибо за ваш ответ.Мне удалось обойти проблему, например, представленную там [link] (http://stackoverflow.com/questions/15388825/doing-a-search-loading-custom-results-into-ember-store). Проблема, с которой я столкнулся сейчас, заключается в том, что при нажатии на сообщение модель не работает. Я думаю, проблема в том, что я возвращаю массив вместо модели. – crazyphysicist

+0

Что вы хотите сделать, когда нажмете сообщение? –

+0

Просто покажите это, как при загрузке PostShowRoute вручную по URL-адресу. Я использую '{{#linkTo" post.show "post}}'. URL-адрес генерируется правильно, но после щелчка на странице остается пустой. – crazyphysicist

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