2013-03-03 4 views
1

С emberjs (1.0.0rc1) и ember-data (очень недавняя сборка # 36d3f1b), я пытаюсь настроить базовый пример crud. Я не могу понять, как получить представленную модель из представления, а затем обновить/сохранить ее. Вот то, что мой код выглядит следующим образом:ember js form submit to view

App = Ember.Application.create(); 

App.Router.map(function() { 
    this.resource('posts', function() { 
    this.route('create'); 
    this.route('edit', { 
     path: '/:post_id' 
    }); 
    }); 
}); 

App.PostsIndexRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Post.find(); 
    } 
}); 

App.PostsCreateView = Ember.View.extend({ 
    submit: function() { 
    console.log(this.get('model')); // undefined 
    } 
}); 

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    body: DS.attr('string') 
}); 

App.Post.FIXTURES = [{ 
    id: 2, 
    title: 'a', 
    body: 'aa' 
}, { 
    id: 5, 
    title: 'b', 
    body: 'bb' 
}]; 

App.Store = DS.Store.extend({ 
    revision: 11, 
    adapter: DS.FixtureAdapter.create({ 
    simulateRemoteResponse: false 
    }) 
}); 

и шаблон создания:

<script type="text/x-handlebars" data-template-name="posts/create"> 
    {{#view App.PostsCreateView tagName="form" classNames="form-horizontal"}} 
    <h3>Create</h3> 

    <div class="control-group"> 
    <label class="control-label" for="title">Title</label> 
    <div class="controls"> 
     <input type="text" id="title" placeholder="Title" /> 
     {{view Ember.TextField valueBinding="title"}} 
    </div> 
    </div> 
    <div class="control-group"> 
    <label class="control-label" for="body">Body</label> 
    <div class="controls"> 
     <input type="password" id="body" placeholder="Body" /> 
    </div> 
    </div> 
    <div class="control-group"> 
    <div class="controls"> 
     <button class="btn">Create</button> 
    </div> 
    </div> 

    <div>{{#linkTo 'posts'}}Back{{/linkTo}}</div> 
    {{/view}} 
</script> 

Как я могу получить доступ к значению вида (сериализовано модели) с крюка представить? Во-вторых, как я затем сохраняю это через FixtureAdapter?

ответ

2

Первой частью вашего вопроса сложно ответить, потому что это на самом деле довольно просто, но для того, чтобы оно было простым, вам нужно изменить способ, которым вы думаете о модели CRUD. Ваша функция «отправить» не требуется. Когда вы создаете представление), у него должен быть экземпляр вашей модели, связанный с ним. (Если вы создаете новый, это будет новый пустой экземпляр.) Когда вы вносите изменения в эту модель в представлении, они создаются мгновенно; нет необходимости представлять. (В конце концов, что бы вы представили?)

Я не уверен, что это на самом деле отвечает на ваш вопрос, но, возможно, это ставит вас на трек, чтобы ответить на него.

Я могу быть более определенно о вашем втором вопросе, сохраняя значение через адаптер Fixtures: вы не можете. FixturesAdapter - это адаптер адаптера для загрузки приборов (в основном данных только для чтения) в хранилище. Изменения, внесенные в модели от FixturesAdapter, продлятся до тех пор, пока приложение не будет перезагружено. Чтобы сохранить данные, вам необходимо перейти с адаптера FixturesAdapter на другой адаптер (возможно, RestAdapter).

+0

Благодарим за ответ. Итак, следуя описанному вами подходу, это не приведет к циклическим отключениям сервера каждый раз, когда изменяется атрибут (типы пользователей в письме в текстовом поле)? Для второй части я должен был быть более ясным; Я просто хочу играть с FixturesAdapter, как если бы это был настоящий магазин, хотя изменения были потеряны при обновлении, а затем замените его на адаптер REST. Не могли бы вы указать мне на рабочий пример? – Harper

+0

Нет. Я не эксперт в деталях, но более сложные адаптеры «умны», когда они сохраняют обновления на сервере и не подталкивают модель каждый раз, когда ее касаются. – pjmorse

+0

Для FixturesAdapter это хороший подход, потому что они дают вам что-то для разработки, прежде чем у вас будет установлен серверный сервер. Однако в этом мире «упорство» означает «сделать его последним заново»; то, что вы получаете с помощью Fixtures, - это способность откладывать работу с таким упорством до конца. Если пришло время для вас разобраться с этим, пришло время перейти от FixturesAdapter. – pjmorse

0

this article имеет дело с созданием небольшого примера приложения, включая форму создания (он первоначально на португальском языке, но, к счастью, перевод Google не слишком усложняет текст в этом случае). код может быть найден here (важная часть - путь вниз по странице) и живой пример here.