rm-rf
rm-rf

Reputation: 1333

use results from ember data findQuery as ArrayController contentBinding

I'm trying to write my first "real" ember app. I've gone through a couple tutorials and I'm now attempting to use ember in conjunction with Ember Data to fetch data from a Rails app and display it.

I've gotten it to fetch the data, parse it, and display it, although I'm not convinced it's in the best way possible. I have an App.itemsController that is similar to this:

App.itemsController = Em.ArrayController.create({
  content: App.store.findQuery(App.Item, {visible: true}),
});

I also have an App.ItemIndexView, whose template looks like

{{#each App.itemsController}}
    {{id}}{{view App.ItemView item=this}}
{{/each}}

I have a couple of questions about this.

First and foremost, I want to allow a user to change an items visibility to false. I have this code in the App.ItemView file:

acknowledge: function() {
  this.item.set('visible', false);
  App.store.commit();
}

the record gets updated, however I want that entire item to drop from the view and it doesn't. How do I make this record be removed from App.itemsController.content?

My second question, which may in fact also answer the first, am I completely off in the boondocks as far as my implementation of this? I feel like there should be a way for me to set something like contentBinding: 'App.store.findQuery(App.Item, {visible: true})' and have non-visible ones be removed but I've tried that and nothing shows up. So I'm wondering if something in the way I have my whole app setup is flawed and keeping things from playing nice.

Upvotes: 2

Views: 2037

Answers (1)

Stéphane Blond
Stéphane Blond

Reputation: 810

You can use the filter function instead of findQuery:

content: App.store.filter(App.Item, function (item) {
  return item.get('visible');
})

The result will be re-evaluated when underlying data change. You still have to get data from the server via find/findAll/findQuery though.

Upvotes: 3

Related Questions