【问题标题】:Knockout Bindings using Key value pair使用键值对的淘汰赛绑定
【发布时间】:2015-06-18 14:59:25
【问题描述】:

我正在使用 BreezeJs 进行淘汰赛,以从我的本地数据库中检索和存储数据。我在这里面临的问题是菜单中的键值绑定。 我想要做的是显示并从选择菜单中选择“名称”属性并将相应的“Id”属性存储到我的数据库中。

直到现在我都在尝试

var operators = [
{id: 0, name: 'addition'},
{id: 1, name: 'subtraction'},
{id: 2, name: 'division'},
{id: 3, name: 'multiplication'}
   ];

// 我的 html 绑定

<select data-bind="options: $root.operators , optionText: 'name', optionvalue: 'Id', value: operator"/>

//这里的'operator'是数据库中的colomnName,我试图以整数格式存储这个东西。

但根据我的代码,它的输出显示为

[object object]

如何从选择菜单中显示和选择“name”属性 [varchar] 并将相应的“id”属性 [int] 存储到我的数据库中。

//@TSV

html 绑定

 <div data-bind="with: jobs">
      <div>
        <label>FirstNumber :</label>
        <input data-bind="value: first_no" />
    </div>

         <div>
        <label>operator :</label>
         <select data-bind="options: $root.operators , optionsText: 'name', optionsValue: 'id', value: $root.operator"/>
    </div>
     <div>
        <label>Second Number:</label>
        <input data-bind="value: second_no" />
    </div><div>
        <label>Result :</label>
        <input data-bind="value: result" />
    </div></div>

// these(result,second_no,operator,first_no) 是我数据库中的列名,'jobs' 是一个 observableArray。

注意:我正在使用breathJS从数据库中获取和存储数据,这就是我提到它的标签的原因,尽管上面的问题是淘汰赛而不是微风。

【问题讨论】:

  • optionText 更改为optionsTextoptionvalue 更改为optionsValue
  • 您的第一个问题是关于 select 元素的选项敲除绑定。看起来它已经解决了。对吗?
  • 第二个问题是你从数据库加载了一个数组(observable),这个数组通过敲除绑定到一些控件,最后你希望输入的值保存到数据库中。正确的?那么负责从数据库加载数据并将它们存储回来的代码在哪里呢?
  • @TSV 绑定问题已较早解决,如果您愿意,可以查看此代码,但到目前为止,我进行了一些更改,因此不要使用变量名称,但该代码仍然可以正常工作。 stackoverflow.com/questions/28446415/…
  • 我在您的代码中发现了两个问题:第一个 - 淘汰赛选择选项,第二个 - BreezeJs 库的使用。这就是为什么我建议拆分这个问题。第二个应该 IMO 包含小的完整样本,说明问题。

标签: knockout.js breeze


【解决方案1】:

此代码适用于我:

var operators = [
{id: 0, name: 'addition'},
{id: 1, name: 'subtraction'},
{id: 2, name: 'division'},
{id: 3, name: 'multiplication'}
   ];

ko.applyBindings({ operators: operators, operator: ko.observable(2) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>

<select data-bind="options: $root.operators, optionsText: 'name', optionsValue: 'id', value: 
$root.operator"/>

我已在您的代码中修复了以下问题:在“division'}”之后插入逗号,更正了“optionsText”和“optionsValue”参数,optionsValue 应为“id”。

【讨论】:

  • 感谢 TSV 的回答,但我仍然面临一个问题,即相应的 'id' 根本没有保存到数据库中,操作符列中数据库中唯一的条目是 '0',它指的是 Addition,而我正在尝试其他“名称”属性(每次尝试添加任何行时)。
  • 在我看来,这个问题与淘汰赛选项绑定有关,而不是与 BreezeJs 库有关。我相信,如果你用清晰简短的场景描述和代码示例(使用BreezeJs客户端库)提出相应的问题,你一定会得到答案。
  • 这里没有什么新东西可以展示给你,因为我正在使用微风使用微风控制器从数据库中提取数据并将其存储在一些在 html 标记中具有绑定的 observable 中。
  • 您可以检查我根据您的要求粘贴的代码@TSV
猜你喜欢
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多