【问题标题】:Durandal 2.0 - Update the value of an observable in the viewDurandal 2.0 - 更新视图中可观察对象的值
【发布时间】:2014-05-01 10:25:06
【问题描述】:

我是 Durandal 的新手,我的问题可能是一个非常简单的问题。

我将列表加载到下拉列表中,并在显示下拉列表的链接上加载当前值,

和显示其他值时未正确更新显示下拉链接的链接值。

但实际上,我无法在 select 函数中设置 observable 的值。

查看模型

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>

非常感谢

【问题讨论】:

    标签: javascript jquery data-binding knockout.js durandal-2.0


    【解决方案1】:

    你更新一个 observable 的方式是这样的:

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

    不是这样(你在上面做的)

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

    这是用值字符串“Something else”覆盖 someObservable,因此不再是 observable,这就是它不会更新 ui 的原因。

    [JS Fiddle showing how to set observables.]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多