从js和模板使用的Knockout.js映射

时间:2016-03-11 11:24:02

标签: knockout.js knockout-mapping-plugin

主要概念如下 - 我们有主要的状态对象,其中包含部分,每个部分都有自己的数据和类型。我想根据部分类型显示每个部分数据。主要对象如下所示:

$array = [
'Apple' => 1,
'Orange' => 0,
'Banana' => 1,
];
echo '<select multiple>';
foreach ($array as $fruit => $sel) {
    $selected = 0;
    if ($sel == 1) {
        $selected = 'selected';
    }
    echo '<option value="' . $fruit . ' " ' . $selected . '>' . $fruit . '</option>';
}
echo '</select>';

我正在尝试使用敲除映射和每个部分类型的模板,但实际上并不知道如何做到这一点。我所拥有的就是这个 - https://jsfiddle.net/7hd8zed5/1/。有什么建议怎么做?

1 个答案:

答案 0 :(得分:1)

您可以通过提供获取foreach循环的当前项并返回模板名称字符串的方法来动态选择模板的名称。 (official documentation

以下是代码中“模板提供程序方法”的示例:

更新了数据绑定

<ul data-bind="template: { name: getTemplateForSection, foreach: sections, as: 'obj' }"></ul>

更新了StateModel:

function StateModel(data) {
  ko.mapping.fromJS(data, mapping, this);

  this.getTemplateForSection = function(sectionModel) {
    var section = sectionModel.section;

    switch (section.Type()) {
      case "Text":
        return "Text-template";
      default:
        return "Error-template";
    }
  }
};

我把你的小提琴分开,并包括我提出的例子here