【问题标题】:JsViews Checkbox binding from an inner loop来自内部循环的 JsViews Checkbox 绑定
【发布时间】:2016-04-18 20:51:19
【问题描述】:

我正在尝试使用 JsViews 为内部循环中的复选框获取双向绑定

不确定这是否可能。

<div id="targetSelection"></div>
<script id="targetItem" type="text/x-jsrender">
  <b>{^{:text}}</b>
  <div id="answers_{^{:fieldName}}" class='collapse'>
    {^{for answers ~fieldName=fieldName}}
    <label>
      <input type="checkbox" data-fieldName="{{>~fieldName}}" data-index="{{:index}}" data-link="{:selected}" checked="{^{:selected}}" /> {{:text}} : {^{:selected}}
    </label>
    <br /> {{/for}}
  </div>
  <br />
</script>

和JS代码:

var target = [{
  "fieldName": "GENDER",
  "text": "Gender",
  "answers": [{
    "index": 1,
    "text": "Male"
  }, {
    "index": 2,
    "text": "Female"
  }, ]
}, {
  "fieldName": "AGE",
  "text": "Age",
  "answers": [{
    "index": 1,
    "text": "15-19"
  }, {
    "index": 2,
    "text": "20-24"
  }, {
    "index": 3,
    "text": "25-29"
  }, {
    "index": 4,
    "text": "30-34"
  }, {
    "index": 5,
    "text": "35-39"
  }, {
    "index": 6,
    "text": "40-44"
  }, {
    "index": 7,
    "text": "45+"
  }, ]
}];

$.each(target, function(questionIndex, question) {
  $.each(question.answers, function(answerIndex, answer) {
    answer.selected = true;
  });
});

$("#targetSelection").html($.templates("#targetItem").render(target));

http://jsfiddle.net/22q7z9n9/

我也试图在复选框更改时触发一个事件

提前致谢

【问题讨论】:

    标签: javascript jquery checkbox 2-way-object-databinding jsviews


    【解决方案1】:

    您检查过 JsViews 文档吗?您正在调用 render() 方法,而不是 link() 方法,并且使用的是 jsrender.js 而不是 jsviews.js

    所以你需要像Example page那样加载jsviews.js,然后写:$.templates("#targetItem").link("#targetSelection", target);

    http://www.jsviews.com/#jsv-quickstart

    阅读基础知识后,您可以继续:

    {^{for answers}}
      <label>
        <input type="checkbox" data-link="selected" />
        {{:text}} : {^{:selected}}
      </label>
      <br />
    {{/for}}
    

    对于事件,有几个选项,包括直接绑定到输入更改事件,或监听数据中的可观察更改等 (http://www.jsviews.com/#observe)。查看示例...

    这是一个工作版本http://jsfiddle.net/28Lezc9m/4/

    我还更改了:&lt;div id="answers_{^{:fieldName}}" class='collapse'&gt;&lt;div data-link="id{:'answers_ + fieldName" class='collapse'&gt; - 如 this tutorial sequence 中所述。

    【讨论】:

    • 那行不通,我已经试过那个语法了,不知道是不是内部循环的问题:jsfiddle.net/28Lezc9m
    • 那是因为正如我所说,您实际上并没有使用 jsviews.js。请参阅上面我更新的答案,以及工作中的 jsfiddle...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多