javascript - 从 Observables 计算的 Knockout.js CSS

标签 javascript knockout.js

我有两个可观察对象,一个指定模块名称,另一个为其子项设置高度。我正在尝试制作一个自定义的 css 计算可观察对象,其中包括这两个可观察对象,如下所示:

self.moduleId = ko.observable('dbm-name');
self.slideWidth = ko.observable(75);
self.css = ko.observable('');
self.setcss = ko.computed({
    read: function() {
        return '#' + self.moduleId() +
               ' {\n\tbackground: #fff;\n\tcolor: #000;\n}
                  \n.cont_width {\n\twidth: ' + self.slideWidth() +
               '%;\n}';
    },
    write: function(value) {
        self.css(value);
        return value;
    }
});

但它也应该允许用户手动编写/编辑一些 css。问题是,一旦 moduleIdslideWidth 更改,css observable 就不会更新,除非用户进入自定义 css 文本区域并进行更改(即添加和删除一个空间只是为了让它更新)。当其他两个可观察值中的任何一个发生变化时,如何自动更新 css 可观察值?或者是否有更好的方法来设置我的 CSS 功能?

最佳答案

您可以指定读取函数来设置您的 css:

self.setcss = ko.computed({
        read: function() {
            var _css = '#' + self.moduleId() +
                '{\n\tbackground: #fff;\n\tcolor: #000;\n}' +
                '\n.cont_width {\n\twidth: ' + self.slideWidth() +
                '%;\n}';
            self.css(_css);       
        },
        write: self.css
 });

但是像这样,您只能将其中一个值作为您的 css,即用户键入的 css 或计算的产品,在每个时刻。

但我想您可以修改读取方式,使其连接值以在您已有的 css 末尾添加新值。

here is a working fiddle

关于javascript - 从 Observables 计算的 Knockout.js CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888767/

相关文章:

javascript - 使用 document.getElementById() 中的变量简单图像收缩和扩展;

javascript - 禁用 JavaScript SPA 的 "enter"和反向链接

javascript - knockout 不会更改对象数组中的复选框状态

javascript - 如果从 Dropdown Knockout js 中选择特定值,则显示 div

javascript - 通过 javascript 连接到 Maya

javascript - 删除 URL 的最后一部分基于

javascript - 如何合并数组中的重复条目

javascript - 如何调用函数来渲染 `ng-repeat` 指令中的项目?

javascript - 用相同的字段名称对象填充 observable-fields-object

javascript - 我如何进行初始 JavaScript Ajax 初始化?