javascript - 为什么我无法更新我的 JavaScript 对象属性值?

标签 javascript jquery

我在更新应用程序对象属性值时遇到问题!每当我在 App 对象中调用方法时,我都会尝试将“visible”属性从 false 更新为 true!

现在我不明白为什么我无法更新这些值!有人可以帮我吗?

这是代码;

var app = app || {};

app.layout = {

    // SIDEBAR
    'sidebar': function(a) {
        var options = {
            'settings': {
                'object': $('.sidebar-left'),
                'visible': false,
                'type': 'wide'
            },
            'open': function() {
                if(options.isActive() === false) {
                    options.settings.visible = true;
                    options.settings.object.addClass('active');
                }
            },
            'close': function() {
                if(options.isActive() === true) {
                    options.settings.visible = false;
                    options.settings.object.removeClass('active');

                }
            },
            'isActive': function() {
                if(options.settings.visible === true) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        return options[a];
    }

    // HEADER
    // CONTENT
    // FOOTER
}

这个小应用程序 API 背后的想法是,我不需要手动检查容器是否可见并手动更改 UI,我只需调用 app.layout 方法就可以完成这项工作。 .

如您所见,当 app.layout.sidebar('open')();app 两种方法使用时,我尝试更新 'visible' 属性值.layout.sidebar('close')(); 被调用!

谢谢

<小时/>

这是更新版本:

http://jsfiddle.net/Farzad/ndb1490v/3/

希望它对那些希望将其集成到他们的应用程序中的人有所帮助,因为它使跟踪您的 UI 变得非常容易,而无需您每次都手动检查...

但是,如果有人知道更好的方法,请更新 jsFiddle 版本并在评论部分链接回来:)

谢谢你们,特别是那些乐于助人的人 干杯

最佳答案

您的代码每次都重新创建选项对象sidebar称为 false作为 visible 的硬编码值:

app.layout = {

    // SIDEBAR
    'sidebar': function(a) {
        var options = {
            'settings': {
                'object': $('.sidebar-left'),
                'visible': false,                 // <=== Note
                'type': 'wide'
            },
            // ...
        return options[a];
    }
}

因此,您进行的任何调用如下:

app.layout.sidebar('open')();

...总会看到options.settings.visiblefalse .

我看不出您的 layout 的复杂性有任何原因。对象,因此除了确保 options 之外,不能真正推荐适当的更改。并不是每次都重新创建。

如果您愿意使用这种调用:

app.layout.sidebar.open();

...那么你可以让事情变得不那么复杂:

var app = app || {};

app.layout = (function() {
    var options = {
        'settings': {
            'object': $('.sidebar-left'),
            'visible': false,
            'type': 'wide'
        }
    };
    return {
        sidebar: {
            'open': function() {
                if(options.isActive() === false) {
                    options.settings.visible = true;
                    options.settings.object.addClass('active');
                }
            },
            'close': function() {
                if(options.isActive() === true) {
                    options.settings.visible = false;
                    options.settings.object.removeClass('active');

                }
            },
            'isActive': function() {
                if(options.settings.visible === true) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        // HEADER, e.g.
        ,
        header: {
            // ...
        }
        // CONTENT
        // FOOTER
    };
})();

请注意,您需要确保代码在 .sidebar-left 之后运行。元素存在。

<小时/>

旁注:您在 options 中使用的引号对象属性键都是可选的,您可以将它们省略:

var options = {
    settings: {
        object: $('.sidebar-left'),
        visible: false,
        type: 'wide'
    }
};

对于定义 sidebar 的定义也是如此。在 JavaScript 中,唯一需要在属性名称周围加上引号的情况是该名称不是无效的 IdentifierName(例如,其中包含空格,或者以数字开头但不是数字)。

关于javascript - 为什么我无法更新我的 JavaScript 对象属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500904/

相关文章:

javascript - 有什么办法可以抑制 React.FC 中的水化警告吗?

javascript - 如何使用输入字段、文本和提交按钮实现自定义后备功能

javascript - 如何减少除换行符之外的额外空格

javascript - Web Audio API,获取两个数组中左/右 channel 的 getByteTimeDomainData。

javascript - 对 JavaScript 对象数组中的日期事件进行排序,并与当前日期进行比较以显示在表单中

javascript - 如何在 Nivo Slider HTML 中启用自动播放

javascript - 我需要拍摄在浏览器中播放的视频的快照

javascript - 如何将 json 数组转换为 javascript 数组

javascript - 递归函数 - 为什么不是无限循环?

javascript - JsFiddle 上的鼠标事件不起作用?