邏輯模式,軟件設計概念
你一定要在components方面來思考,不管你選擇使用什麼樣的實現語言或框架。
- 劃分應用程序分爲不同的意見(也許爲每個導航菜單元素)。
- 根據它們所服務的功能類型,進一步細分這些視圖(根據需要)。我喜歡Bootstrap的面板幫助您可視化的方式。
- 開發這些組件中的每一個,併爲它們命名,例如ContactList,ContactEdit,ContactView等。爲這些組件中的每個組件開發HTML視圖和JavaScript,TypeScript或其他語言視圖模型。請務必使用MVC邏輯將視圖與數據分開,並使用視圖中的佔位符指示填寫數據的位置。這些視圖就像模板一樣。
- 使用您的特定語言或框架將其鏈接在一起。
這是關於Component-Based Software Architecture and Design的很好的教程。
奧裏利亞組件邏輯
我目前使用Aurelia路上,因爲你提到它,我們將使用奧裏利亞框架作爲一個例子來說明上述原則。最佳做法是創建組件(用於模塊化和重用),然後使用if.bind
屬性將它們包含或不包含在DOM中。
例子:
<tenant-one if.bind="tenantA"></tenant-one>
<tenant-two if.bind="tenantB"></tenant-two>
或僅顯示/隱藏視圖中的每個組件(但包括所有在DOM),你可以使用show.bind
代替if.bind
,但似乎做的意義不大您用例。
奧裏利亞數據綁定
因爲我不知道你真正希望在這裏顯示,上面的代碼是基於問題的代碼段。但是,對於只有數據發生更改的類似視圖(如模板),您可以將父數據綁定到子級,以便可以正確顯示數據。在奧裏利亞,這看起來像這樣。
例子:
<tenant-view data.bind="tenantData"></tenant-view>
更復雜的例子:
<tenant-view fname.bind="firstName" lname.bind="lastName" data.bind="tenantData"></tenant-view>
在每個例子中,你需要開發4個文件。您需要具有視圖和視圖模型的主(父)容器。視圖模型負責檢索或訪問租戶信息,然後將其傳遞給每個子組件。子組件將擁有自己的視圖和視圖模型。
例如,TenantView視圖(高度簡化的)可能是這樣的:
<template>
<p><strong>Tenant Name: </strong>${fname} ${lname}</p>
<p><strong>Additional Data: </strong>${data}</p>
<p if.bind="data.rentDue">Tenant's rent is due!</p>
</template>
然後是TenantView視圖模型(再次,高度簡化的)可能是這樣的:
import { bindable, bindingMode } from 'aurelia-framework';
export class TenantView {
@bindable fname;
@bindable lname;
@bindable data;
}
一旦您將創建此組件,然後將其插入(可選)父視圖中,如下所示:
<template>
<h1>Contact View</h1>
<h2>${firstName} ${lastName}</h2>
<tenant-view if.bind="cat == 'tenant'" fname.bind="firstName" lname.bind="lastName" data.bind="contactData"></tenant-view>
<phone-numbers data.bind="contactData"></phone-numbers> <!-- another component -->
<page-footer></page-footer> <!-- another component -->
</template>
是c onditions獨家? –