【问题标题】:KnockoutJS change value and text of input on checkbox change eventKnockoutJS 在复选框更改事件上更改输入值和文本
【发布时间】:2014-07-03 05:54:34
【问题描述】:

我有一个技能列表,当用户检查技能时,如果选中,则会显示多年的输入。我的问题是,如果用户输入了一年,然后取消检查技能,那么多年的值仍然与输入中的文本一起保存在 observable 中。我不确定是否需要使用事件处理程序、订阅函数或仅使用 ko 计算函数来清除值。

http://jsfiddle.net/bjk964/CQ2CG/2/

<div data-bind="foreach: ApplicationSkills">                
    <p>
        <span data-bind="text: Skill_SkillTypeName"></span>
        <input type="checkbox" data-bind="checked: Skill_Checked" />
        <span data-bind="visible: Skill_Checked" class="years">Years:</span>
        <input type="text" data-bind="value: Skill_Years, visible: Skill_Checked" />
    </p>                
</div>

var Application = function () {
    this.ApplicationSkills = ko.observableArray();
};

var ApplicationSkill = function () {
    var self = this;
    this.Skill_SkillTypeID = ko.observable(0);
    this.Skill_Years = ko.observable().extend({ maxLength:2, number:true });
    this.Skill_Checked = ko.observable(false);
    this.Skill_SkillTypeName = ko.observable();
};

var vm = new Application();
ko.applyBindings(vm);

var skill = new ApplicationSkill()
skill.Skill_SkillTypeID(1);
skill.Skill_SkillTypeName('Data Entry');

vm.ApplicationSkills.push(skill); 

【问题讨论】:

标签: jquery knockout.js


【解决方案1】:

我会做一个计算:

var skillYears = ko.observable();
this.Skill_Years = ko.computed({
    read: function () { return this.Skill_Checked() ? skillYears() : undefined; },
    write: skillYears
}, this);

【讨论】:

  • 在实施您的解决方案时,我在 IE7/8 中收到以下错误:SCRIPT438: Object doesn't support property or method 'Skill_Checked' ViewModel.js, line 387 character 29
  • Skill_Checked 属性是否存在于您的 ApplicationSkill 视图模型中?
  • @Esteban 确实如此。我将该对象用于可见:在跨度标签和文本框上绑定
  • 由于Skill_Years 现在依赖于Skill_Checked,您需要先定义Skill_Checked。
  • @Brandon 是我犯的愚蠢错误。谢谢,现在工作得很好。
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多