Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data binding 我正在使用backbone.stickit进行模型绑定。如何将预填充的select与模型绑定?_Data Binding_Backbone.js_Backbone Stickit - Fatal编程技术网

Data binding 我正在使用backbone.stickit进行模型绑定。如何将预填充的select与模型绑定?

Data binding 我正在使用backbone.stickit进行模型绑定。如何将预填充的select与模型绑定?,data-binding,backbone.js,backbone-stickit,Data Binding,Backbone.js,Backbone Stickit,我有一个表单,其中包含一个选择,并填充了选项。我想使用backbone.stickit将其绑定到一个模型,但文档说明了如何在绑定配置中填充select。我找不到一个简单的方法用我的预填充select绑定模型 这是我的html <div id="main"> <form id="formulario"> <input id="test1" type="text" /> <select id="test2">

我有一个表单,其中包含一个选择,并填充了选项。我想使用backbone.stickit将其绑定到一个模型,但文档说明了如何在绑定配置中填充select。我找不到一个简单的方法用我的预填充select绑定模型

这是我的html

<div id="main">
    <form id="formulario">
        <input id="test1" type="text" />
        <select id="test2">
            <option value="0">a</option>
            <option value="1">b</option>
        </select>
    </form>
    <div id="value-test1"></div>
    <div id="value-test2"></div>
</div>
我试图使用jquery从绑定配置上的select获取选项值,但没有成功

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          options = $("#test2 option").map(function(){
            return {value: this.value, label: this.text};
          }).get();
          return options;
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();
这是可行的,但我认为这将是一个混乱的形式与许多选择

window.options = $("#test2 option").map(function(){
    return {value: this.value, label: this.text};
}).get();

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          return window.options;
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();
将预填充的select绑定到模型的最佳方法是什么


我只尝试使用backbone.stickit,使用另一个库更容易?

stickit实际上将值绑定为数据以选择选项,而不是使用value html属性。这背后的原因是,在富应用程序中,您通常希望使用不同类型的数据作为选项值。例如,您可能需要一个选项来表示JavaScript对象或数组,该值不容易序列化为html属性;或者,您可能希望将属性值指定给数字2,但由于类型强制,当它保存为属性时,它将转换为字符串2。此外,由于Stickit将解析/拥有选择选项,因此让Stickit呈现选项而不是在两个位置呈现/处理选项是有意义的,更不用说在模板中迭代是丑陋的

也就是说,这个请求非常常见,我确信它支持预渲染的选择选项。你能开一家银行吗?我会在接下来的几天内向大师报告一些事情


编辑:现在正在进行激活。

Stickit实际上将值绑定为数据以选择选项,而不是使用value html属性。这背后的原因是,在富应用程序中,您通常希望使用不同类型的数据作为选项值。例如,您可能需要一个选项来表示JavaScript对象或数组,该值不容易序列化为html属性;或者,您可能希望将属性值指定给数字2,但由于类型强制,当它保存为属性时,它将转换为字符串2。此外,由于Stickit将解析/拥有选择选项,因此让Stickit呈现选项而不是在两个位置呈现/处理选项是有意义的,更不用说在模板中迭代是丑陋的

也就是说,这个请求非常常见,我确信它支持预渲染的选择选项。你能开一家银行吗?我会在接下来的几天内向大师报告一些事情


编辑:现在正在积极进行此操作。

感谢您的努力。我理解您之前将此功能保留在外部的观点,但在某些情况下,我们可以键入更少的代码来预填充select,而不是在客户端填充它。我正在drupal上使用它。感谢您的努力。我理解您之前将此功能保留在外部的观点,但在某些情况下,我们可以键入更少的代码来预填充select,而不是在客户端填充select。我正在drupal上使用它。
window.options = $("#test2 option").map(function(){
    return {value: this.value, label: this.text};
}).get();

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          return window.options;
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();