选择元素选定项目在其绑定后重置

时间:2016-01-24 22:17:00

标签: javascript knockout.js

我有一个绑定到集合的select元素:

import copy

df = copy.deepcopy(turnstile_data)
pdf = df.shift(periods=1)

df['ENTRIESn_hourly'] = df['ENTRIESn'] - pdf['ENTRIESn'].fillna(0)
df['EXITSn_hourly'] = df['EXITSn'] - pdf['EXITSn'].fillna(0)
df['Interval'] = pdf['TIMEn']+'-'+ df['TIMEn'].fillna(0)
df.loc[(df['ENTRIESn'] == 0), 'ENTRIESn_hourly'] = 0
df.loc[(df['EXITSn'] == 0), 'EXITSn_hourly'] = 0
df.loc[(df['C/A'] != pdf['C/A']) | (df['UNIT'] != pdf['UNIT']) | (df['SCP'] != pdf['SCP']), ['ENTRIESn_hourly', 'EXITSn_hourly','Interval']] = 0

df = df[df.Interval != 0]
print df.head(20)

head7=copy.deepcopy(df)
required_df=head7[['UNIT','EXITSn_hourly','Interval']].groupby(head7.UNIT)
print required_df.head(5)

monthlyBudgetRowTypes 是Row类中的observableArray:

在该类中有一个名为 selectedTypeId 的可观察对象。 它代表所选的选项值。

我在Row类中有一个名为 selectedTypeText 的计算observable,它代表选项文本。 只要 selectedTypeId 发生更改,其文本就会发生变化。

 <select data-bind="options: $data.monthlyBudgetRowTypes, optionsValue: 'key', optionsText: 'name', value: $data.selectedTypeId"></select>

我有一个临时数组,我将行添加到:

 function Row() {
      this.monthlyBudgetRowTypes = ko.observableArray([]);
      this.selectedTypeId = ko.observable();
      this.selectedTypeText = ko.computed(function (ev) {
        if (this.selectedTypeId()) {
            var itemType = this.monthlyBudgetRowTypes().filter(function (elem, i, temp) {
                return elem.key() == this.selectedTypeId();
            }.bind(self));
            if (itemType.length > 0) {
                return itemType[0].name();
            }
        }
    }, this);
}

在我添加完所有行后,我将temp数组添加到实际行数组中 - observablearray。

                row = new model.IncomeRow();
                row.monthlyBudgetRowTypes(incomeTypes);
                row.amount(item.IncomeAmount);
                row.date(item.IncomeDate);
                row.selectedTypeId(item.IncomeName);
                row.accountKey(item.MonthlyIncomeKey);
                row.datepickerID = 'inc_' + item.MonthlyIncomeKey;

                tempTableRows.push(row);

我不明白的是,所选文本项被绑定2次。 第一次使用正确的值。但是当我将temp数组中的所有项添加到observableArray中时,select元素将被绑定,并且所有值都将获得下拉列表中的第1项。

以下是我的观点:

incomeRows(tempTableRows);

我该如何避免呢?

2 个答案:

答案 0 :(得分:0)

您的optionsValue绑定是“key”,但是在构建Row时,您使用ItemName设置selectedTypeId,用作optionsText而不是optionsValue。

答案 1 :(得分:0)

好吧,这很愚蠢,但我发现了问题。我有两个表,每个表中的每一行都有自己的类型集合。显然我把错误的类型添加到了错误的集合中。 无论如何,它是我身边的纯编码错误。