国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從服務(wù)器獲取數(shù)據(jù),引入組件

codecook / 2695人閱讀

摘要:博文原址從服務(wù)器獲取數(shù)據(jù),引入組件接著前面四篇環(huán)境搭建以及使用創(chuàng)建第一個靜態(tài)頁面引入計算屬性動態(tài)內(nèi)容模型,保存數(shù)據(jù)到數(shù)據(jù)庫發(fā)布項目,加入功能清理模板,使用組件重構(gòu)版本之后組件會越來越重要。

博文原址:從服務(wù)器獲取數(shù)據(jù),引入組件

接著前面四篇:

環(huán)境搭建以及使用Ember.js創(chuàng)建第一個靜態(tài)頁面

引入計算屬性、action、動態(tài)內(nèi)容

模型,保存數(shù)據(jù)到數(shù)據(jù)庫

發(fā)布項目,加入CRUD功能

清理模板,使用組件重構(gòu)

2.0版本之后組件會越來越重要。有關(guān)組件的介紹請看Ember.js 入門指南之二十八組件定義。組件的創(chuàng)建同樣可以使用Ember CLI命令創(chuàng)建。如下命令創(chuàng)建了2個組件,創(chuàng)建的同時會自動創(chuàng)建2個文件;一個是組件類(app/components/xxx.js)。一個是組件對應(yīng)的模板(app/templates/components/xxx.hbs)。

ember g component library-item
ember g component library-item-form

修改模板library-item

下面在組件模板library-item.hbs中增加如下代碼:


{{item.name}}

Address: {{item.address}}

Phone: {{item.phone}}

如果注意看可以發(fā)現(xiàn)上述代碼與app/templates/libraries/index.hbs文件的代碼非常相似。這是item替代了model。至于item是怎么來的請看Ember.js 入門指南之二十九屬性傳遞,這篇博文介紹了組件的屬性傳遞,item是從調(diào)用組件的模板傳遞過來的。上述代碼中還有一個重要的東西是{{yield}},這個表達式與{{outlet}}類似。同樣也是一個占位符。組件渲染之后會被傳進來的html代碼替換。比如下面的調(diào)用代碼:

{{#library-item item=model}}
  Closed
{{/library-item}}

組件渲染之后,上述的Closed會替換到{{yield}}這里,最終得到的html代碼如下:

有關(guān)組件渲染的內(nèi)容請看Ember.js 入門指南之三十包裹內(nèi)容。

修改模板library-item-form


{{input type="text" value=item.name class="form-control" placeholder="The name of the Library"}} {{#if item.isValid}}{{/if}}
{{input type="text" value=item.address class="form-control" placeholder="The address of the Library"}}
{{input type="text" value=item.phone class="form-control" placeholder="The phone number of the Library"}}

注意觀察上述代碼與libraries/new.hbslibraries/edit.hbs幾乎是一樣的。有點不一樣的是把校驗移到model中。比如校驗name屬性不為空。
注意:頂部導(dǎo)入的代碼。

import Model from "ember-data/model";
import attr from "ember-data/attr";
import Ember from "ember";

export default Model.extend({
  name: attr("string"),
  address: attr("string"),
  phone: attr("string"),

  isValid: Ember.computed.notEmpty("name")
});

再修改app/templates/libraries/index.hbs引入組件。

List

{{#each model as |library|}}
{{#library-item item=library}} {{#link-to "libraries.edit" library.id class="btn btn-success btn-xs"}}Edit{{/link-to}} {{/library-item}}
{{/each}}

在迭代中使用組件,通過屬性名item傳遞迭代出來的對象library到組件中。其中link-tobutton這兩句代碼會替換到組件library-item{{yield}}上。
等待項目重啟完成,可以看到界面與之前的沒有任何變化。頁面是沒有變化,但是后臺的處理還需要完善。

修改app/templates/libraries/new.hbs


Add a new local Library

{{library-item-form item=model buttonLabel="Add to library list" action="saveLibrary"}}
{{#library-item item=model}}
{{/library-item}}

修改app/templates/libraries/edit.hbs

Edit Library

{{library-item-form item=model buttonLabel="Save changes" action="saveLibrary"}}
{{#library-item item=model}}
{{/library-item}}

在組件類library-item-form.js增加對action的處理。

import Ember from "ember";

export default Ember.Component.extend({
  buttonLabel: "Save",

  actions: {

    buttonClicked(param) {
      this.sendAction("action", param);
    }

  }
});
合并edit.hbsnew.hbsform.hbs

原來的文件edit.hbsnew.hbs幾乎是一樣的,可以使用組件重構(gòu)。


{{title}}

{{library-item-form item=model buttonLabel=buttonLabel action="saveLibrary"}}
{{#library-item item=model}}
{{/library-item}}

為了實現(xiàn)代碼復(fù)用,首先把不同的部分定義成屬性:titlebuttonLabel。默認情況下路由會渲染到同名的模板上,如果你想修改這個默認行為可以使用renderTemplate()方法。

使用方法renderTemplate()setupController()

API介紹

renderTemplate()

setupController()

默認情況下路由會渲染到同名的模板上,我們使用方法renderTemplate()執(zhí)行渲染的模板。比如下面的代碼使用這個方法執(zhí)行路由new渲染到模板libraries/form.hbs

// app/routes/libraries/new.js
import Ember from "ember";

export default Ember.Route.extend({

  model: function () {
    return this.store.createRecord("library");
  },

  setupController: function (controller, model) {
    this._super(controller, model);

    controller.set("title", "Create a new library");
    controller.set("buttonLabel", "Create");
  },

  renderTemplate() {
    this.render("libraries/form");
  },

  actions: {

    saveLibrary(newLibrary) {
      newLibrary.save().then(() => this.transitionTo("libraries"));
    },

    willTransition() {
      let model = this.controller.get("model");

      if (model.get("isNew")) {
        model.destroyRecord();
      }
    }
  }
});

注意方法setupController()設(shè)置組件模板中的屬性titlebuttonLabel的值。同樣的在修改路由edit.js。

// app/routes/libraries/edit.js
import Ember from "ember";

export default Ember.Route.extend({

  model(params) {
    return this.store.findRecord("library", params.library_id);
  },

  setupController(controller, model) {
    this._super(controller, model);

    controller.set("title", "Edit library");
    controller.set("buttonLabel", "Save changes");
  },

  renderTemplate() {
    this.render("libraries/form");
  },

  actions: {

    saveLibrary(newLibrary) {
      newLibrary.save().then(() => this.transitionTo("libraries"));
    },

    willTransition(transition) {
      let model = this.controller.get("model");

      if (model.get("hasDirtyAttributes")) {
        let confirmation = confirm("Your changes haven"t saved yet. Would you like to leave this form?");

        if (confirmation) {
          model.rollbackAttributes();
        } else {
          transition.abort();
        }
      }
    }
  }
});

使用組件重構(gòu)之后可以刪除app/templates/libraries/new.hbsapp/templates/libraries/edit.hbs,這兩個文件不需要了。效果截圖如下:

使用組件nav-link-to重構(gòu)
  • 知道組件如何使用之后我們繼續(xù)重構(gòu)項目代碼,重構(gòu)導(dǎo)航模板navbar.hbs的鏈接代碼。使用Ember CLI命令創(chuàng)建組件。

    ember g component nav-link-to

    這次使用擴展的方式擴展一個組件類,擴展Ember內(nèi)置的組件類LinkComponent,使用方法extend()擴展一個類。然后使用屬性tagName指定渲染之后的標(biāo)簽。更多有關(guān)組件屬性的介紹請看Ember.js 入門指南之三十一自定義包裹組件的HTML標(biāo)簽,當(dāng)然你也可以參考網(wǎng)址的教程實現(xiàn)本文的需求。

    // app/components/nav-link-to.js
    import Ember from "ember";
    
    export default Ember.LinkComponent.extend({
      tagName: "li"
    });

    注意:記得修改Ember.Component.extendEmber.LinkComponent.extend。組件模板很簡單。

    
    {{yield}}

    最后在修改導(dǎo)航模板navbar.hbs為如下內(nèi)容:

    
    

    等待項目重啟完成,可以看到界面與之前的沒有任何變化,可以任意點擊導(dǎo)航欄菜單且不會出錯。效果截圖如下:

    家庭作業(yè)

    本篇的家庭作業(yè)就是好好理解組件!參考下面的文章認真學(xué)習(xí)、理解組件。

    Ember.js 入門指南之二十八組件定義

    Ember.js 入門指南之二十九屬性傳遞

    Ember.js 入門指南之三十包裹內(nèi)容

    Ember.js 入門指南之三十一自定義包裹組件的HTML標(biāo)簽

    Ember.js 入門指南之三十二處理事件

    Ember.js 入門指南之三十三action觸發(fā)變化



    為了照顧懶人我把完整的代碼放在GitHub上,如有需要請參考參考。博文經(jīng)過多次修改,博文上的代碼與github代碼可能有出入,不過影響不大!如果你覺得博文對你有點用,請在github項目上給我點個star吧。您的肯定對我來說是最大的動力?。?/p>

    文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79533.html

    相關(guān)文章

    • 【CuteJavaScript】Angular6入門項目(3.編寫服務(wù)引入RxJS)

      摘要:發(fā)布通過回調(diào)方法向發(fā)布事件。觀察者一個回調(diào)函數(shù)的集合,它知道如何去監(jiān)聽由提供的值。 本文目錄 一、項目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2.編寫服務(wù) 五、引入RxJS 1.關(guān)于RxJS 2.引入RxJS 3.改造數(shù)據(jù)獲取方式 六、改造組件 1.添...

      RebeccaZhong 評論0 收藏0
    • 【CuteJavaScript】Angular6入門項目(2.構(gòu)建項目頁面和組件

      摘要:編寫單一組件我們首先寫一個書本信息的組件,代碼如下單個課本像火焰像灰燼程姬知識點是一個的復(fù)寫器指令,就像中的和中的。寫到這里,看看我們項目,還是一樣正常在運行,只是現(xiàn)在項目中組件分工更加明確了。 本文目錄 一、項目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2.編寫服務(wù) 五、...

      Lemon_95 評論0 收藏0
    • 使用純粹的JS構(gòu)建 Web Component

      摘要:它賦予了僅僅使用純粹的就可以創(chuàng)建可重用組件的能力。我們會用到的來創(chuàng)建我們的用戶卡片。在較早版本的瀏覽器中,我們不能使用來隔離組件。這可以部分歸咎于對的影響很大的。你可以在這里閱讀第二部分的教程使用純粹的構(gòu)建 原文鏈接:https://ayushgp.github.io/htm...譯者:阿里云 - 也樹 Web Component 出現(xiàn)有一陣子了。 Google 費了很大力氣去推動它更...

      Luosunce 評論0 收藏0
    • 使用純粹的JS構(gòu)建 Web Component

      摘要:它賦予了僅僅使用純粹的就可以創(chuàng)建可重用組件的能力。我們會用到的來創(chuàng)建我們的用戶卡片。在較早版本的瀏覽器中,我們不能使用來隔離組件。這可以部分歸咎于對的影響很大的。你可以在這里閱讀第二部分的教程使用純粹的構(gòu)建 原文鏈接:https://ayushgp.github.io/htm...譯者:阿里云 - 也樹 Web Component 出現(xiàn)有一陣子了。 Google 費了很大力氣去推動它更...

      RayKr 評論0 收藏0

    發(fā)表評論

    0條評論

    最新活動
    閱讀需要支付1元查看
    <