ngModel在特定情况下不更新

时间:2015-10-01 22:42:07

标签: angularjs

好的,我已经盯着这段代码好几个小时了,根本没有任何意义......

我正在尝试遍历扩展类型列表并在下拉列表中显示它们以使用复选框。问题是当我在sk-checkbox指令中检查它时,我的ngModel不正确。在一种情况下,ngModel是正确的,我可以看到值从true -> false切换,但在另一种情况下,我的ngModel来自undefined -> true ...为什么ng-model正常工作?对于第一个实现而不是第二个?

此作品

{{ normalizeIcons(user.UI.Restore.Files.dataSet) | json }}
<li ng-repeat="icon in normalizeIcons(user.UI.Restore.Files.dataSet)">
    <div sk-checkbox ng-model="user.UI.Restore.Files.filter[icon]" name="icon-{{icon}}" ></div>
    <img sk-img class="extIcon {{icon}}" />
</li>

这个没有

{{ normalizeIcons() | json }}
<li ng-repeat="icon in normalizeIcons()">
   <div sk-checkbox ng-model="user.UI.Restore.Files.filter[icon]" name="icon-{{icon}}" ></div>
   <img sk-img class="extIcon {{icon}}" />
</li>

这是我的normalizeIcons()功能:

service.normalizeIcons = function(data){
        var icons = [];

        if(data) {
            var exts = _.pluck(data, 'extension');
            var unique = _.uniq(exts);

            var iconClasses = [];
            unique.forEach(function(ext){
                iconClasses.push(ICONS.map[ext] || 'default');
            });

            icons = _.uniq(iconClasses);
        }else{
            icons = ICONS.list;
        }

        return icons;
    }

所以这里的唯一区别在于我正在做更多工作来解析Angular常量ICONS.map。不起作用的情况只是使用对数组的简单赋值。

在我使用第一个有效的实现之前,并没有想到它的任何内容。现在我希望能够为我的图标返回一个固定的数组,但是所谓的更简单的版本是那个不起作用的版本!

图标常量

{
    map: {
        'docx': 'word',
        'doc': 'word',
        'dot': 'word',
        'dotx': 'word',
        'xls': 'excel',
        'xlsx': 'excel',
        'xlt': 'excel',
        'xltx': 'excel',
        'ppt': 'powerpoint',
        'pps': 'powerpoint',
        'pptx': 'powerpoint',
        'pot': 'powerpoint',
        'potx': 'powerpoint',
        'pdf': 'adobe-pdf',
        'ai': 'adobe-ill',
        'ait': 'adobe-ill',
        'eps': 'adobe-ill',
        'psd': 'adobe-photo',
        'psb': 'adobe-photo',
        'png': 'image',
        'jpg': 'image',
        'jpeg': 'image',
        'gif': 'image',
        'tif': 'image',
        'svg': 'image',
        'vsd': 'visio',
        'vdx': 'visio',
        'vsdx': 'visio',
        'vss': 'visio',
        'vsx': 'visio',
        'vst': 'visio',
        'vtx': 'visio'
    },
    list: ['word', 'excel', 'powerpoint', 'adobe-pdf', 'adobe-ill', 'adobe-photo', 'image', 'visio', 'default']
}

0 个答案:

没有答案