【问题标题】:Knockoutjs binding input on ViewModelViewModel 上的 Knockoutjs 绑定输入
【发布时间】:2019-10-24 03:11:10
【问题描述】:

我有一个名为 CreateVM 的 knockout.js ViewModel 包含其他 ViewModel - FrmAddGoodsVM。问题是当我将一些输入绑定到 FrmAddGoodsVM 时,输入将显示 [object HTMLInputElement]。谁能告诉我我错过了什么?

我已将这些输入绑定从 FrmAddGoodsVM 放到 CreateVM 中,它运行良好。但是我想从 FrmAddGoodsVM 绑定它们,不知道为什么不起作用。

index.js

function FrmAddGoodsVM() {
    let self = this; 
    self.frmName = ko.observable(null);
    self.frmAddress = ko.observable(null);
}

function CreateVM() {
    let self = this;
    ...
    self.FrmAddGoodsVM = new FrmAddGoodsVM();
}

$(document).ready(function() {
    let createVM = new CreateVM();
    ko.applyBindings(createVM, document.getElementById('create'))
})

index.html

<form role="form">
    <input id="frmName" data-bind="value: frmName"/>
    <input id="frmName" data-bind="value: frmAddress"/>
</form>

预期输出: 输入元素将没有值 [object HTMLInputElement]

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    我不太确定发生了什么,但你的对象嵌套基本上是一回事。 Create VM 具有一个属性,即真正的 VM。所以你只需要调整你的绑定和Tada!

    function FrmAddGoodsVM() {
        let self = this; 
        self.frmName = ko.observable("");
        self.frmAddress = ko.observable("");
    }
    
    function CreateVM() {
        let self = this;
        self.FrmAddGoodsVM = new FrmAddGoodsVM();
    }
    
        let createVM = new CreateVM();
        ko.applyBindings(createVM.FrmAddGoodsVM)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    
    <form role="form">
        <input id="frmName" data-bind="value: frmName"/>
        <input id="frmName" data-bind="value: frmAddress"/>
    </form>

    附带说明一下,为单个功能引入 jquery 是非常浪费的,尤其是在 dom 的末尾可以很好地加载淘汰赛时,或者您可以只使用香草版本,OnContentReady

    【讨论】:

    • 谢谢!!您的回答让我意识到我需要将该 ViewModel 与淘汰赛绑定。我发现的其他解决方案是使用“with”数据绑定:stackoverflow.com/questions/25253547/…
    • @Hung,在我的回答历史中,我已经完成了更完整的 ko 视图模型示例,这些示例对我来说效果很好,请随时参考。
    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多