Knockout.js: свойства ViewModel не наблюдаются

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

<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(); свойство модели и используйте его в текстовом поле и метке, обновление работает должным образом.

If I do:

var model = ko.observable();

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

С уважением, ЕВ


person event.er    schedule 09.12.2016    source источник
comment
Я пытался воспроизвести описанную вами проблему, но не смог. Не могли бы вы проверить эту скрипку и посмотреть, представляет ли она то, что вы пытаетесь сделать? jsfiddle.net/wgcdeyyf   -  person user3297291    schedule 09.12.2016
comment
Можете ли вы использовать реальный визуализированный HTML для управления на стороне сервера и придумать репликацию проблемы jsfiddle (просто заглушите ответ службы)?   -  person G. Stoynev    schedule 09.12.2016


Ответы (1)


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

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

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

  • Заполнить данные
  • Сопоставьте его с моделью просмотра

    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);
    });
    
person event.er    schedule 12.12.2016