2016-09-06 2 views
0

новичка к кендоКендо UI MVVM Datasource привязки к HTML-элемент ввода

Кендо источник данных возвращает только массивы и мой RESTful API возвращает клиенту как массив из одного элемента.

Однако я не могу привязать поле «Имя» клиента к окну ввода html.

Я могу, однако, использовать данные, если поместил их в «ul», как показано в приведенном ниже коде. Я знаю, что ответ json хорошо сформирован, потому что я могу console.log (obj [0] .Name);

Я попытался вернуть obj [0] в данные: источника данных, но это просто сломало все. (нет сообщения об ошибке среза, поскольку он пытается срезать массив).

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

Html и JS ниже:

<div data-role="view" data-title="Client Detail" data-model="app.clientView"> 

<!-- this does not work --> 

<input data-bind="value: app.clientView.data"/> 
<input data-bind="value: app.clientView.data[0].Name"/> 
<input data-bind="value: app.clientView.data.Name"/> 

<!-- this works --> 

<ul data-role="listview" data-source="app.clientView.data" data-template="client-template"></ul> 

<script type="text/x-kendo-template" id="client-template"> 
    <a href="components/clientView/view.html?id=#: ID #"> 
     <div>#: Name #</div> 
     <div>#: LastActivityOn #</div> 
    </a> 
</script> 

app.clientView = kendo.observable({ 
 
    data: new kendo.data.DataSource({ 
 
     transport: { 
 
      read: { 
 
       url: app.uri + "clients/69", //+ id, 
 
       type: "get", 
 
       dataType: "json", 
 
       beforeSend: function (req) { 
 
        req.setRequestHeader('X-authKey', app.key); 
 
       } 
 
      } 
 
\t \t }, 
 
     schema: { 
 
     \t data: function (response) { 
 
      \t console.log(response); 
 
      \t var obj = $.parseJSON(response); 
 
       console.log(obj[0].Name); 
 
      \t return obj; 
 
     \t } 
 
     } 
 
    }) 
 
});

ответ

2

Kendo UI MVVM value bind не могут указывать на экземпляр DataSource Kendo UI. Только source привязки могут это сделать.

В вашем случае переделайте свою реализацию и добавьте несколько новых полей в viewModel (app.clientView), которые можно использовать для привязок значений. Это нормально populate эти поля after the DataSource instance receives its data.

На боковой ноте нет необходимости подробно указывать поля viewModel, включая ссылку viewModel в конфигурации привязок. Вам нужны только имена полей. Проверьте Kendo UI MVVM demos.

+0

Очень полезно, но я не могу заставить его работать. Если я удалю свой список в приведенном выше примере, то, похоже, данные модели представления: и schema: data; никогда не запускаются. Я добавил поле Name: и установил его в схеме: данные с представленным списком присутствуют, и он работает, без списка нет. Я добавил изменение: чтобы получить успех вызова restfull, но он никогда не срабатывает. Вручную вызывает clientView.data.read(); блокирует эмулятор. Несмотря на все это, я чувствую, что приближаюсь. : P Я тщательно обдумываю ваш ответ, теряя там хорошие вещи. – kpg

+0

Источник данных Kendo UI DataSource не обрабатывает запросы, если это не сказано об этом виджету привязки данных или разработчику. Заблокирование, о котором вы говорите, вероятно, является отдельной проблемой - проверьте ошибки JavaScript. – dimodi

+0

Мне пришлось сделать обходной путь, потому что мой URL-адрес отдыха в форме .../clients/{id}, где {id} зависит от предыдущего представления. Лучше всего я мог бы вычислить url в url: часть транспорта разрешена при загрузке скрипта, задолго до того, как я установил идентификатор глобальной переменной. Обходной путь состоял в том, чтобы вызвать функцию loadClient в представлении onShow-обработчика, а затем выполнить типичный вызов ajax, а затем с jQuery я установил свои элементы html - решение моих проблем простым и знакомым способом. Я отметил это как ответ, потому что это ответ на вопрос, который я задал. – kpg

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