2013-12-02 3 views
0

Мое приложение использует данные Fixture (позже будет порт для Localstorage), и мне нужно реализовать метод «save» в зависимости от щелчка пользователя. Пользователь нажмет это действие, которое сопоставляется с видом и с нем мнение, она передается на контроллер, чтобы сохраняться данные модели, по существу, шаблон имеет:Данные EmberJS, сохраняющие данные

<button {{action 'save' this target='view'}}>Save</button> <!-- note that the 'this' keyword I am sending corresponds to a specific instance of the model that is in a collection, done using an {{#each model}} loop 

вид имеет

actions:{ 
    save:function(card){ 
     // perform some UI activity 
     this.get('controller').send('save',card); // card representing 'this' 
    } 
} 

контроллер имеет:

actions:{ 
    save:function(card){ 
     console.log("controller reached"); // does execute 
     card.save(); // spits out an error 
    } 
} 

Все работает отлично, однако метод card.save() вызова не работает в контроллере. Я имею в виду, все, что я пытаюсь сделать, это упорствовать конкретную «карту» мои данные, но он держит плеваться:

Uncaught TypeError: Объект # не имеют метода «Сохранить»

Что я отсутствует здесь?

Боковые ноты:

  1. Контроллер возвращает коллекцию моделей
  2. corresponding'view»для контроллера также имеет„изменить“частичное загруженный в него. Итак, когда пользователь выбирает «редактировать» конкретную модель, он не переходит на другой URL-адрес, а загружает форму «редактирования» с тем же адресом.
  3. Это означает, что модель в этом конкретном контроллере по существу является сборкой, и я хочу сохранить только отредактированную модель .
+0

Что вы используете, данные ember? модель ember? – Kingpin2k

+0

Можете ли вы показать мне класс для этого? App.SomeRecord = Ember.Object .... – Kingpin2k

+0

Конечно, я использую данные Fixture. Вот пример: App.Card.FIXTURES = [ { ID: 1, front: «Какова цель магазина Ember?», назад: «Сохраняет загруженные модели и извлекает модели, которые еще не были загружен ", stack_id: 1 }, ... –

ответ

2

Похоже, что вы не используете какую-либо библиотеку управления записью на стороне клиента (например, данные ember-data или ember-model). При этом ваши экземпляры App.Card на самом деле не являются экземплярами чего-либо, они просто POJO и не существует метода сохранения, определенного на POJO.

Это звучит, как вы хотите, чтобы сделать некоторые исследования в данных Эмбер или Ember модели (я предлагаю данные Эмбер http://emberjs.com/guides/models/)

Если вы не хотите использовать либо, вы можете просто использовать Ajax вызовов для сохранения данных:

save:function(card){ 
    console.log("controller reached"); // does execute 
    //  card; // spits out an error 
    $.ajax({... , data:$(card), ...}); 
} 

Если это приспособление и у вас нет намерения сохранить его в любом месте, и это просто всухую, добавить уродливое предупреждение или войти

save:function(card){ 
    console.log("controller reached"); // does execute 
    console.log('pretend to save ' + card); 
    alert('pretend to save ' + card); 
} 
+0

Ну, библиотека сохранения данных может быть позже решена, ember-data или Ember-model, сейчас метод save() - это только тезка, но идея состоит в том, чтобы обеспечить работу над интерфейсом, вы знаете например, прохождение игры/клик –

+0

Я полностью понимаю, но save - это метод, который существует на экземплярах модели DS.Model (ember model) не только на pojo, я добавлю дополнительную информацию выше. – Kingpin2k

+0

yep сухой пробег и отсутствие «сохранения» имеет смысл. Однако вопрос немного отличается, мы пытаемся получить доступ к одному экземпляру App.Card.Fixtures, тогда как содержащий контроллер (StackCardsController) возвращает коллекцию App.Card.FIXTURES , Нет маршрута/контроллера для объекта «Карта». Предполагая, что существует библиотека постоянства, возникает вопрос: как сохранить только «конкретную модель в контроллере, которая возвращает коллекцию моделей того же типа». Надеюсь, что имеет смысл –

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