2016-12-09 16 views
0

Я думаю, что у меня отсутствует фундаментальная концепция где-то. Выход на код ниже 100%, но свойства объекта не наблюдаются.Knockout.js: ViewModel Свойства не наблюдаются

<script> 
    var model = { }; 

    var mapping = {    
      create: function() { 
       var _profile; 
       $.ajax({ 
        type: "GET", 
        url: 'Manage.aspx/GetContact', 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        async: false, 
        success: function (results) { 
         _profile = results.d; 
        }, 
        error: function (err) { 
         alert(err.status + " - " + err.statusText); 
        } 
       }); 
       return _profile; 
      } 
    };  

    $(document).ready(function() {       
     var vm = ko.mapping.fromJS(model, mapping); 
     ko.applyBindings(vm); 
    }); 
</script> 

<dl class="dl-horizontal"> 
    <dt> 
    <label>E-Mail:</label></dt> 
     <dd><span data-bind="text: E_Mail" /></dd> 
     <dd><asp:TextBox runat="server" data-bind="value: E_Mail" /></dd> 
</dl> 

Мой код позади:

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public static DynamicsNAV.NavContact.Contact GetContact() 
{ 
    DynamicsNAV.NavContact.Contact contact = ReadContact(); 
    if(contact == null) 
    { 
     contact = new DynamicsNAV.NavContact.Contact(); 
     contact.E_Mail = HttpContext.Current.User.Identity.Name; 
    } 

    return contact; 
} 

В этом примере, я стараюсь, чтобы увидеть, если пользовательский интерфейс обновляется при изменении адреса электронной почты в текстовом поле, которое он не делает. Если я добавлю адрес электронной почты: ko.observable(); свойство модели и использовать его в текстовом поле и метке, обновление работает, как ожидалось.

Если я:

var model = ko.observable(); 

значения не отображаются при загрузке страницы. И ошибок не возникает.

С наилучшими пожеланиями, Е.В.

+0

Я попытался воспроизвести проблему, вы можете описать но не мог. Не могли бы вы проверить эту скрипку и посмотреть, представляет ли она то, что вы пытаетесь сделать? https://jsfiddle.net/wgcdeyyf/ – user3297291

+0

Можете ли вы использовать фактический визуализированный HTML для своего серверного элемента управления и придумать репликацию jsfiddle проблемы (просто отключите ответ службы)? –

ответ

0

Спасибо за ответы, он выслал мой мыслительный процесс на пути, чтобы решить мою проблему!

Моя проблема, похоже, была в отображении и последовательности обработки. В общем, я неправильно понял функцию «создать» в сопоставлении. Я думал, что это может помочь в поиске и заполнении модели.

Так это закончилось тем, что мое решение:

  • данные заселить
  • Карта его для просмотра модели

    var model = { }; 
    
    var vm; 
    $(document).ready(function() { 
    
        $.ajax({ 
         type: "GET", 
         url: 'Manage.aspx/GetContact', 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         async: false, 
         success: function (results) { 
          model = results.d; 
         }, 
         error: function (err) { 
          alert(err.status + " - " + err.statusText); 
         } 
        }); 
    
        vm = ko.mapping.fromJS(model); 
        ko.applyBindings(vm); 
    });