Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

从 "update ms-if 机制" ( 49829bc ) 起,ms-visible无法覆盖元素上已有的隐藏样式 #89

Closed
dengzhizhi opened this issue Oct 1, 2013 · 7 comments

Comments

@dengzhizhi
Copy link
Contributor

如下示例,从 49829bc 至最新的 89da0ec ,按Toggle按钮不生效。如果去掉class="hide" 声明,则工作正常。而9月26日前的版本 (941345e93c )则可正确运行。把class="hide"改为style="display:none"有同样的现象。

        <style>
            .hide {
                display: none
            }
        </style>
        <div id="TestZone" ms-controller="TestCtrl">
            <div ms-visible="showed" class="hide">Showed</div>
            <button ms-click="toggle()">Toggle</button>
        </div>
        <script type="text/javascript">
            avalon.define("TestCtrl", function(vm) {
                vm.showed = true
                vm.toggle = function() {
                    var VM = avalon.vmodels.TestCtrl;
                    VM.showed = !VM.showed
                }
            })
            avalon.scan(document.getElementById("TestZone"), "TestCtrl")
        </script>

另顺便问一下,为了避免未经处理的原始模板内容在页面载入时在页面中一闪而过,我目前采用的方案是先把元素设为隐藏再用ms-visible显示出来。请问对于这种需求有官方推荐的解决方案吗?(例如angularJS的ng-cloak)

@dengzhizhi
Copy link
Contributor Author

比较代码发现是以下新增的代码导致此问题:

    if (typeof root.hidden === "boolean") {
        bindingHandlers.visible = function(data, vmodels) {
            updateViewFactory(data.value, vmodels, data, function(val, elem) {
                elem.hidden = val ? false : true
            })
        }
    }

这段代码在浏览器支持hidden属性的情况下使用hidden来实现ms-visible,然而在FF(其他浏览器未测试)下,hidden属性的优先级低于class与style。我暂时先在项目中去掉这段代码绕过此问题。

@RubyLouvre
Copy link
Owner

1、你说得无错,已去掉hidden实现
2、元素上不是ms-controller吗?所有绑定都位于它的绑定之下。这个属性扫描之后会被去掉
因此我们可以用以下display处理闪屏效果

[ms-controller]{
    display:none
}

@dengzhizhi
Copy link
Contributor Author

这个方案不错。我觉得可以放到文档里,感觉这种需求比较常见。

@liudianpeng
Copy link

非常好,终于遇到国产项目了 (是不是国产?)

@caoqitong826
Copy link

[ms-controller]{
display:none
}
我加上这个之后 扫描完整个模块都隐藏了是什么原因?浏览器是chrome。avalon 版本是2.1.15,现在为了不显示"{{}}",暂时使用ms-text。

@RubyLouvre
Copy link
Owner

.ms-controller{
display:none
}

用这个

@caoqitong826
Copy link

.ms-controller{
display:none
}
用这个的话,模块可以正常显示,但是还是会出现{{}}。感觉像是没有生效。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants