【问题标题】:KnockoutJS UI helper bindingsKnockoutJS UI 助手绑定
【发布时间】:2013-07-26 10:23:07
【问题描述】:

我正在使用 KnockoutJS 进行一些 UI 自动化。我的问题很简单;在使用 KnockoutJS 时,我想创建类似的东西:

<div data-bind="textboxFor: FirstName"></div>

使用自定义绑定。最终结果应如下所示:

<!-- Name -->
<div class="control-group">
    <label class="control-label" for="txtFirstName">FirstName:</label>
    <div class="controls">
        <input id="txtFirstName" type="text" data-bind="value: FirstName" />
    </div>
</div>

我试过了:

ko.bindingHandlers.textboxFor = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var propertyName, display;
        var valueList = element.attributes['data-bind'].nodeValue.split(',');
        valueList.forEach(function (node) {
            if (node.indexOf('textboxFor') !== -1) {
                propertyName = node.split(':')[1].trim();
            }
        });

        if (!viewModel.translations) {
            display = propertyName.charAt(0).toUpperCase() + propertyName.slice(1);
        }
        else {
            display = viewModel.translations[propertyName];
        }

        var _innerHTML = "<label class='control-label' for='txt" + propertyName + "'>" + display + ":</label>" +
                         "<div class='controls'>" +
                            "<input id='txt" + propertyName + "' type='text' data-bind='value: " + propertyName + "' />" +
                         "</div>";
        element.className = "control-group";
        element.innerHTML = _innerHTML;
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // This will be called once when the binding is first applied to an element,
        // and again whenever the associated observable changes value.
        // Update the DOM element based on the supplied values here.
    }
};

但这不适用于

ko with: Person
绑定。 其次,我检索绑定属性名称的方式感觉和看起来很不确定。也许有人可以指导我找到更好的解决方案。

提前感谢您的时间和耐心! 卡洛斯

【问题讨论】:

    标签: knockout.js custom-binding


    【解决方案1】:

    Knockout 已经内置了这种东西,看看模板绑定:http://knockoutjs.com/documentation/template-binding.html。我很确定这将完全符合您的目标。

    【讨论】:

    • 感谢您的回复,但模板并不是我真正想要的。模板是在一些随机的 html 代码中使用脚本标签定义的。我希望这个功能成为我框架的一部分,所以是模块化的。
    猜你喜欢
    • 2015-05-27
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2012-05-05
    • 2012-01-18
    相关资源
    最近更新 更多