【问题标题】:knockout.js dynamic field binding with variable带变量的 knockout.js 动态字段绑定
【发布时间】:2012-05-20 18:02:58
【问题描述】:

有没有办法动态替换 ko.computed 中正在写入和读取的字段?例如,使用这个函数,我想用我可以传入的变量字段名替换 self.JobStartDate:

function Job(data) {
    var self = this;
    ko.mapping.fromJS(data, {}, this); 

    var computedDateFn = {
        read: function() {
            return formatDate(ko.utils.unwrapObservable(self.JobStartDate), true);
        },

        write: function(value) {
            var jsonDate = "/Date(" + Date.parse(value).getTime();
            self.JobStartDate(jsonDate);
        }
    }

    this.formattedStartDate = ko.computed(computedDateFn);
    this.formattedEndDate = ko.computed(computedDateFn); // this guy would need the field it writes to/reads from to be self.JobEndDate
}

【问题讨论】:

    标签: data-binding knockout.js computed-observable


    【解决方案1】:

    如果您将 computedDateFn 设为一个函数,该函数接受您的字段名作为字符串并返回定义您计算的 observable 的对象,您可以使用这样的数组表示法...

    http://jsfiddle.net/bczengel/tMTCV/

    【讨论】:

    • 这绝对是我正在寻找的答案,除了我得到 self[fieldName] 不是一个函数。想法?
    • 如果 self.JobEndDate 或 self.JobStartDate 不可观察,就会发生这种情况。你能在我的小提琴中添加一些上下文以便我测试它吗?
    • 我在 JSON 中添加了一个作业项的 subsn-p。请注意,工作本身有一个日期字段,然后是薪水上有 2 个日期字段。我目前正在尝试为薪水领域的人这样做,但我也需要在工作领域完成。在此先感谢您的帮助。在这种情况下,“薪水”是工作的主题。我不能通过说“self['Salary.JobStartDate'] 来找到它吗?我在这里添加了一些更新:jsfiddle.net/xCMnq/1
    • Brian - 它完全可以直接在现场工作。导致中断的是 .Salary 子对象上的字段。
    • 2 个问题。 1. json 是一个对象数组,您将 Job 构造函数传递给它,就好像它在对象上一样,所以我添加了一个 for 循环来迭代数组。 2. 您不能混合使用括号表示法和点表示法,而且您真的希望您的计算结果在 Salary 对象中,而不是在您的 Job 对象中。这一切都可以通过将一些选项传递给映射插件来完成。这是更新的小提琴...jsfiddle.net/bczengel/xCMnq/4 ...检查控制台的视图模型。因为我没有 formatDate 方法,所以我无法让它与您的视图一起使用。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多