使用Vue.js

时间:2016-10-24 19:25:16

标签: vue.js

我刚刚开始使用Vue.js.我在jsfiddle中有一个简化的版本:https://jsfiddle.net/07uzLvum/2/。在Chrome中运行良好,但在IE 11中,我得到了' c'未定义'文件:vue.js,行:2252,第36栏。我动态构建一个HTML表,其中通过查询服务直到运行时才知道列和行。为了在jsfiddle中进行演示,我已使用硬编码值替换了服务调用。完整的代码如下。

<div id="deliverables">
<div v-show="error" class="ProjectDeliverables_error">{{errorMessage}}</div>
<div class="ms-h2 ProjectDeliverables_loading" v-show="!loaded">Sit tight. Shouldn't be long now.</div>
<table style="width:100%;" v-show="loaded">
    <thead>
        <tr>
            <th class="ms-vh2" v-for="column in columns">{{column.title}}</th>
        </tr>
    </thead>
    <tbody>
        <tr v-for="deliverable in deliverables">
            <template v-for="c in columns">
                <td class="ms-vb2 edit" v-if="c.name === 'Edit'">
                <img src="blank.gif" style="cursor:pointer" />                        
                </td>
                <td v-else>
                    <span v-if="c.name === 'PFO_GatewayStatus'">
                    </span>
                    <span v-else>{{deliverable[c.name]}}</span>
                </td>
            </template>
        </tr>
    </tbody>
</table>

var vm = new Vue({
el: '#deliverables',
data: {
    deliverables: [
        {'Title': 'Test', 'Phase': '0', 'Start': '1/3/2016', 'End': '1/7/2016'},
        {'Title': 'Test 2', 'Phase': '1', 'Start': '1/8/2016', 'End': '1/12/2016'},
        {'Title': 'Test 3', 'Phase': '2', 'Start': '1/13/2016', 'End': '1/17/2016'},
    ],
    columns: [
        {'name': 'Edit', 'title': 'Edit', 'type': 'Computed'},
        {'name': 'Title', 'title': 'Title', 'type': 'String'},
        {'name': 'Type', 'title': 'Type', 'type': 'String'},
        {'name': 'Phase', 'title': 'Phase', 'type': 'String'},
        {'name': 'Edit', 'title': 'Edit', 'type': 'Computed'},
        {'name': 'Start', 'title': 'Start', 'type': 'DateTime'},
        {'name': 'End', 'title': 'End', 'type': 'DateTime'}
    ],
    loaded: true,
    error: false,
    errorMessage: ''
},
methods: {

}

});

知道问题是什么吗?

根据回复更新。更新的小提琴:https://jsfiddle.net/07uzLvum/3/ 我需要删除<template>并将每个循环放在td标记上。

<td v-for="c in columns" v-if="c.name === 'Edit'" class="ms-vb2 edit">
                    <img src="blank.gif" style="cursor:pointer" v-on:click="openEditForm(deliverable)" />
                    <i v-if="deliverable.Type === ''" v-on:click="" class="fa fa-line-chart sprint" aria-hidden="true"></i>
                </td>
                <td class="ms-vb2" v-else>
                    <span v-if="c.name === 'Status'" v-html="getGatewayStatusImage(deliverable)">
                    </span>
                    <span v-else>{{deliverable[c.name]}}</span>
                </td>

由于我必须进行v-if / v-else解析,这似乎更难阅读。看看代码,我会假设for循环只会循环通过第一个TD并且永远不会接收v-else TD,但似乎循环在TD之外提升。

思考?

2 个答案:

答案 0 :(得分:3)

问题在于某些DOM元素(如<tr>)对可以在其中显示的元素有限制 - 这是特定于浏览器的。

在这种情况下,IE11正在吃<template>标签。

有关详细信息,请参阅此处:

http://vuejs.org/guide/components.html#DOM-Template-Parsing-Caveats

答案 1 :(得分:0)

就我而言,代码段缺少关闭代码</div>。 尝试检查是否有匹配的打开和关闭标签对。