avalon2组件ms-for改变数组时不生效

发布于 2022-09-04 01:50:07 字数 1740 浏览 14 评论 0

1、问题:在使用avalon2.1.6写一个下拉选择组件,发现改变下拉数据源数组后ms-for不生效。

2、

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div ms-controller="test">
        <ms-selector ms-widget="@config"></ms-selector>
    </div>
</body>
<script src="//cdn.bootcss.com/avalon.js/2.1.6/avalon.js"></script>
<script>
    var test_vm = avalon.define({
        $id:'test',
        config: {
            dataList: [
                {
                    id: 1,
                    name: '11111',
                },
                {
                    id: 2,
                    name: '22222',
                }
            ]
        }
    });
    var selector_vm = null;
    avalon.component('ms-selector', {
        template: '<div>\
                        <input type="text" \
                        ms-on-keypress="@keypressOn">\
                        <ul ms-if="@dataList.length > 0">\
                            <li ms-for="el in @dataList">{{el.name}}</li>\
                        </ul>\
                    </div>',
        defaults: {
            dataList: [],
            keypressOn: function(e) {
                if(e.charCode === 13){

                    this.dataList.push({id:7, name:'sfsfsf'})
                }
            },
            onInit: function(){
                console.log('onInit')
            },
            onReady: function(){
                selector_vm = this;
            }
        },
    })

</script>
</html>

3、在组件文本框中输入回车后向组件dataList数组中加入一个元素,第一次可以成功,再次操作就不会增加了,控制台看组件vm里的dataList元素已经增加,但是ms-for并没有生效渲染出来。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不喜欢何必死缠烂打 2022-09-11 01:50:07

重新scan()绑定渲染下试试呢

空‖城人不在 2022-09-11 01:50:07

貌似avalon把‘id’属性名称当成数组元素唯一性标识了。可以将id属性名改成其他名称(比如did),或将其属性值改成不重复值测试即可通过,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div ms-controller="test">
        <ms-selector ms-widget="@config"></ms-selector>
    </div>
</body>
<script src="//cdn.bootcss.com/avalon.js/2.1.6/avalon.js"></script>
<script>
    var test_vm = avalon.define({
        $id:'test',
        inc: 3,    //增加一个自变量,以名id值重复
        config: {
            dataList: [
                {
                    id: 1,
                    name: '11111',
                },
                {
                    id: 2,
                    name: '22222',
                }
            ]
        }
    });
    var selector_vm = null;
    avalon.component('ms-selector', {
        template: '<div>\
                        <input type="text" \
                        ms-on-keypress="@keypressOn">\
                        <ul ms-if="@dataList.length > 0">\
                            <li ms-for="el in @dataList">{{el.name}}</li>\
                        </ul>\
                    </div>',
        defaults: {
            dataList: [],
            keypressOn: function(e) {
                if(e.charCode === 13){

                    this.dataList.push({id:this.inc, name:'sfsfsf'})
                    this.inc++    //保证不重复
                }
            },
            onInit: function(){
                console.log('onInit')
            },
            onReady: function(){
                selector_vm = this;
            }
        },
    })

</script>
</html>
誰認得朕 2022-09-11 01:50:07

avalon2有个特性叫做监控数组:
用vm.array.pushArray(arr)就可以更新了
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文