2014-02-18 2 views
1

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

Я просто хочу использовать HTML-форму, привязанную к объекту Kendo Observable, чтобы создать новую запись в удаленном источнике данных.

Все примеры, которые я видел, показывают, как редактировать существующие записи, но это не то, что я ищу (по крайней мере, на данный момент).

Я создал скрипку http://jsfiddle.net/matbeard/fYfYz/2/ с простой вырезанной версией того, что у меня до сих пор. Очевидно, что он фактически не сохранит запись, поскольку URL-адрес создания не указывает нигде, но я уверен, что смогу это обработать.

Может ли кто-нибудь указать мне в правильном направлении? Благодарю.

И потому, что я не могу оставить вопрос без него, вот некоторый код копируется из Fiddle:

var model = kendo.data.Model.define({ 
id: "id", 
fields: { 
    id: { type: 'number' }, 
    field1: { type: 'string' }, 
    field2: { type: 'string' }, 
    field3: { type: 'string' } 
} 
}); 

var viewModel = kendo.observable({ 
dataSource: new kendo.data.DataSource({ 
    type: 'json', 
    transport: { 
     create: { 
      url: '/myurl/create', 
      dataType: 'json', 
      type: 'post' 
     } 
    }, 
    schema: { 
     data: 'data', 
     model: model 
    } 
}); 
}); 

kendo.bind($("#my-form"), viewModel); 

ответ

6

Позволяет сделать это немного другое ...

  • Ваша форма не нужна to (должен) быть привязан к объекту и объекту, содержащему DataSource, так как вы фактически не сохраняете источник данных, а одну запись.

Таким образом, вы должны определить модель, как:

var Model = kendo.data.Model.define({ 
    id: "id", 
    fields: { 
     id: { type: 'number' }, 
     field1: { type: 'string' }, 
     field2: { type: 'string' }, 
     field3: { type: 'string' } 
    } 
}); 

DataSource теперь становится объектом за себе:

var dataSource = new kendo.data.DataSource({ 
    type: 'json', 
    transport: { 
     create: "/myurl" 
    }, 
    schema: { 
     model: Model 
    } 
}); 

И ваш наблюдаемый объект имеет data элемент, который является экземпляром (new Model()).

var viewModel = kendo.observable({ 
    data: new Model(), 
    mySave: function(e){ 
     console.log("this", this.data); 
     dataSource.add(this.data); 
     e.preventDefault(); 
    } 
}); 

Итак, ваша форма должна быть теперь что-то вроде:

<form id="my-form"> 
    <input name="field1" data-bind="value:data.field1" type="text" /> 
    <input name="field2" data-bind="value:data.field2" type="text" /> 
    <input name="field3" data-bind="value:data.field3" type="text" /> 
    <button data-bind="click: mySave">Save</button> 
</form> 

Ваш JSFiddle modiefied http://jsfiddle.net/6LHx3/4/

+0

Это чертовски много проще, чем я думал. Огромное спасибо. – Mat

+0

На самом деле, если вы даже не задумываетесь о повторном использовании DataSource, вам даже не нужно использовать DataSource, и вы можете опубликовать сообщение Ajax или определить обычную HTML-форму (без наблюдаемого объекта) и позволить серверу управлять ею. DataSource, Observable Object, ... это удобно, когда вы используете одну и ту же информацию в другом месте страницы и хотите, чтобы они были автоматически обновлены. – OnaBai

+0

Hi OnaBai. Я считаю объект Observable очень полезным, так как у меня есть несколько выпадающих списков, привязанных к удаленным данным, - выбор выделяет значения других полей. Это просто с объектом Observable. Однако у меня есть еще один вопрос, который, надеюсь, прост ... после того, как я сохранил данные с помощью 'ssowDataSource.add (this.data);' как я могу захватить ответ с сервера, чтобы получить новый идентификатор записи? Большое спасибо за Вашу помощь! – Mat

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