0

まず最初に、vue.js は初めてです。

ユーザーがアイテムプレビューコンポーネントのエキスパンダーアンカータグをクリックすると、アイテムの詳細が表示され、アイテムのプレビューが非表示になります。アイテムプレビューが表示され、独自のエキスパンダーアンカータグをクリックして切り替えようとすると、問題が発生します。私はこれで何が問題なのですか。

これが私のHTMLテンプレートです。

    <script type="text/x-template" id="grid">
    <div class="model item" v-for="entry in data">
        <item-preview v-bind:entry="entry" v-if="entry.hide == 0">
        </item-preview>
        <item-details v-bind:entry="entry" v-if="entry.hide == 1">
        </item-details>
    </div>
</script>

<script type="text/x-template" id="item-preview">
        <header class="preview">
            <a class="expander" tabindex="-1" v-on:click="toggle(entry)"></a>
            <span class="name rds_markup">
                {{ entry.name }}
            </span>
        </header>
</script>


<script type="text/x-template" id="item-details">
    <div class="edit details">
        <section class="edit" tabindex="-1">
            <form action="#">
                <fieldset class="item name">
                    <a class="expander"  v-on:click="toggle(entry)"></a>
                    {{ entry.name }}
                </fieldset>
            </form>
        </section>
    </div>
</script>

ここでは、ビューでグリッド コンポーネントをどのように呼び出したかを示します。

<grid
    :data="packages">
</grid>

そして私のVueの実装のために

var itemPreview = Vue.component('item-preview',{
    'template':"#item-preview",
    'props':{
        entry:Object
    },
    methods:{
        toggle:function(entry){
            entry.hide = !!entry.hide;
            return true;
        }
    }
});

var itemDetails = Vue.component('item-details',{
    'template':"#item-details",
    'props':{
        entry:Object
    },
    methods:{
        toggle:function(entry){
            entry.hide = !!entry.hide;
            return true;
        }
    }
});

var grid = Vue.component('grid',{
    'template':"#grid",
    'props':{
        data:Array,
    },
    components:{
        'item-preview': itemPreview,
        'item-details': itemDetails
    },
    methods:{
        toggle:function(entry){
            entry.hide = !!entry.hide;
            return true;
        }
    }
});




var vm = new Vue({
    el:'#app',
    data:{
        message:'Hello',
        packages:{}
    },

    ready:function(){
        this.fetchPackages();
    },

    methods:{
        fetchPackages:function(){
            this.$http.get(url1,function( response ){
                this.$set('packages',response);
            });
        },

    }

});
4

1 に答える 1

0

愚かな私。このコードの何が問題なのかを理解するのに 30 分かかりました。

これを修正するために私がしたことは 、 item-preview コンポーネントと item-details でentry.hide = !!entry.hide;使用する代わりです。これは私の問題を修正します。entry.hide = trueentry.hide = false

于 2016-04-22T07:05:18.313 に答える