2016-09-12 1 views
1

私はblogPostを追加/編集するとき、私はすべてのプロパティを持つオブジェクトを持っています。私のコード:Meteorのオブジェクトを拡張する

追加ポスト:

Template.postListAdmin.events({ 
    'submit form': (e) => { 

    // Prevent default browser form submit 
    e.preventDefault(); 

    let image = $('#js-image-uploaded'), 
     draft = $('[name="draft"]'), 
     isSmall = false, 
     isDrafted = false; 

    // If post draft, return true 
    if (draft.is(':checked')) isDrafted = true; 

    // If post image is small 
    // return true for add 'small' classe 
    if (image.height() < 80) isSmall = true; 

    let post = { 
     title: $('[name="title"]').val(), 
     image: image.attr('src'), 
     isSmall: isSmall, 
     description: $('[name="description"]').val(), 
     category: $('[name="category"]').val(), 
     time: $('[name="time"]').val(), 
     dateCreated: dateFormat($('[name="dateCreated"]').val(), 'yyyy-mm-dd'), 
     content: $('[name="content"]').val(), 
     draft: isDrafted 
    }; 

    Meteor.call('posts.insert', post); 

    setTimeout(() => { 
     $('#js-post-form') 
     .toggleClass('is-hidden') 
     .find('input, textarea').val(''); 
    }, 500); 

    } 
}); 

編集ポスト:

Template.postEdit.events({ 
    'submit form': function (e) { 

    e.preventDefault(); 

    let image = $('#js-image-uploaded'), 
     draft = $('[name="draft"]'), 
     isSmall = false, 
     isDrafted; 

    if (draft.is(':checked')) isDrafted = true; 
    else isDrafted = false; 

    if (image.height() < 80) isSmall = true; 

    let post = { 
     slug: $('[name="title"]').val(), 
     title: $('[name="title"]').val(), 
     image: image.attr('src'), 
     isSmall: isSmall, 
     description: $('[name="description"]').val(), 
     category: $('[name="category"]').val(), 
     time: $('[name="time"]').val(), 
     dateCreated: dateFormat($('[name="dateCreated"]').val(), 'yyyy-mm-dd'), 
     dateModified: new Date(), 
     content: $('[name="content"]').val(), 
     draft: isDrafted 
    }; 

    Meteor.call('posts.edit', this._id, post); 

    Router.go('postListAdmin'); 

    }, 
}); 

が、私は私のコードを最適化したいと、私のオブジェクト 'ポスト' 2倍を作成しないでしょう。

あなたはこれをどのように最適化できるか考えていますか?

はあなたにすべてのBOBYをありがとう:)

+0

同等の部分を関数に引っ張ったり、管理用テンプレート内の編集用テンプレートを入れ子にしたりしてください。 – MasterAM

+0

例がありますか?私は本当に理解していない:( –

+0

あなたはいくつかの読書を持っている。リファクタリングを見て、[流星ガイド](https://guide.meteor.com/)を読んでください。私は「頭の先を向いた」アプローチが好きですが、RTFMで学習する必要があるものもありますし、タイムアウトでビューを変更しないでください。 – MasterAM

答えて

0

あなたはletキーワードを指定せずにポストを定義することで、何をしたいかを達成することができるはずです。例えば

post = { 
    title: $('[name="title"]').val(), 
    image: image.attr('src'), 
    isSmall: isSmall, 
    description: $('[name="description"]').val(), 
    category: $('[name="category"]').val(), 
    time: $('[name="time"]').val(), 
    dateCreated: dateFormat($('[name="dateCreated"]').val(), 'yyyy-mm-dd'), 
    content: $('[name="content"]').val(), 
    draft: isDrafted 
}; 

あなたは、彼らが完全に同じではないので、しかし、あなたは2つのインスタンスを処理する方法を決定する必要があります。また、どちらのファイルの外にも変数定義を移動すると、コードを整理するのに役立ちます。クライアント上のutilsというディレクトリを使用し、グローバル変数定義を含むファイルを追加することができます。

+0

こんにちは。 –

+0

Meteorでは 'let'や' var'キーワードを使わないでグローバル変数を宣言することで 'let post ='の代わりに 'post ='を使うことができます。 'var post ='です。 – NFab

関連する問題