Durandal 2.0 - обновление значения наблюдаемого в представлении

0

Я новичок в Durandal, мой вопрос, вероятно, очень простой вопрос.

Я загружаю список в раскрывающийся список и текущее значение в ссылке, отображающей выпадающий список,

И значение ссылки, отображающей выпадающее меню, не обновляется правильно, когда выбрано другое значение.

Но на самом деле я не могу установить значение наблюдаемого в функции выбора.

Просмотр модели

var self = this;
self.system = require('durandal/system');

IPsKeys: ko.observableArray([]),
ipKeys: ko.observable(""),

activate: function (context) {
        var that = this;
        that.IPsKeys([]);
        that.ipKeys("");

        return $.when(
            service.getIPSbyClientId(context.clientId).then(function (json) {
                $.each(json, function (Index, Value) {

                    var ClientLobUWYear = {
                        NameLob: Value.LineOfBusiness.Name,
                        NameUWYear: Value.UnderwritingYear
                    };

                    that.IPsKeys().push(ClientLobUWYear);

                    // HERE MY VALUE IS GOOD UPDATING AND THE BINDING WORK
                    if (Index=== 0) {
                        that.ipKeys(ClientLobUWYear);
                    }
                });
            })
        ).then(function () {
            //do some other datacontext calls for stuff used directly and only in view1
        });
},

select: function (item) {
        this.ipKeys = {
            IdClient: item.IdClient,
            IdLob: item.IdLob,
            NameLob: item.NameLob,
            NameUWYear: item.NameUWYear
        };

        /** PROBLEMS HERE **/
        /** Uncaught TypeError: undefined is not a function **/
        this.ipKeys(ClientLobUWYear);
},

Посмотреть

<a id="select_lob-UWYear" class="dropdown-toggle" data-toggle="dropdown" href="#">
     <span class="controls_value" data-bind="text: ipKeys().NameLob">ALOB</span>
     <span class="controls_value" data-bind="text: ipKeys().NameUWYear">AYEAR</span>
</a>
<ul id="dropdown_year" class="dropdown-menu" data-bind="foreach: IPsKeys().sort(sortByLobYear)">
    <li>
        <a href="#" data-bind="click: $parent.select">
            <span class="controls_value" data-bind="text: NameLob">Cargo</span>
            <span class="controls_value" data-bind="text: NameUWYear">2014</span>
        </a>
    </li>
</ul>

большое спасибо

Теги:
data-binding
knockout.js
durandal-2.0

1 ответ

1
Лучший ответ

Способ обновления наблюдаемого выглядит следующим образом:

var someObservable = ko.observable(""); //setting to "";
someObservable("Something else"); //updating to "Something else"

Не так, как это (что вы делаете выше)

var someObservable = ko.observable(""); //setting to "";
someObservable = "Something else"; 

Это перезаписывает someObservable с строкой значения "Что-то еще" и поэтому уже не является наблюдаемым, поэтому он не будет обновлять ui.

[JS Fiddle показывает, как установить наблюдаемые.]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню