从“{输入:{'A':'System.Int32','B':'System.Int32'}生成html,输出:System.Int32}”

时间:2012-11-11 06:28:53

标签: javascript knockout.js metadata

我将元数据视为字符串,如“{输入:{'A':'System.Int32','B':'System.Int32'},输出:System.Int32}”

我正在使用knockout.js并且也可以使用json.parse。但有没有简单的方法来生成一个输入形式,让用户提交输入属性的数据。 (将元数据更改为属性列表会更好吗?

1 个答案:

答案 0 :(得分:0)

我用它来生成属性数组。

self.input = ko.observableArray([]);
if (data.MetaData) {
  //  alert(data.MetaData);
    var d = JSON.parse(data.MetaData).Input;
    for (var prop in d) {
        self.input.push({name:ko.observable(prop),type:d[prop],value:ko.observable('')});
    }
}

和查看:

    <ul data-bind="foreach:test().input">
        <li >
            <label data-bind="text:name, uniqueFor: name"></label>
            <input placeholder="value" data-bind="value:value, uniqueId: name"/>
        </li>
    </ul>

和绑定:

ko.bindingHandlers.uniqueId = {
    init: function (element, valueAccessor) {
        var value = valueAccessor();
        value.id = value.id || ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter);

        element.id = value.id;
    },
    counter: 0,
    prefix: "unique"
};

ko.bindingHandlers.uniqueFor = {
    init: function (element, valueAccessor) {
        var value = valueAccessor();
        value.id = value.id || ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter);

        element.setAttribute("for", value.id);
    }
};