2018-02-07 Ztree函數(shù)、問(wèn)題、AugularJS-功能介紹1、Pygame編寫(xiě)游戲、設(shè)計(jì)模式

第一組:姚成棟 Ztree基礎(chǔ)

  1. 如果ztree要調(diào)用函數(shù),如調(diào)用某個(gè)方法,需要在setting進(jìn)行配置,如

function zTreeOnClick(event, treeId, treeNode) {
   };
var setting = {
    callback: {
        onClick: zTreeOnClick
    }
};
  1. 比如,在頁(yè)面上點(diǎn)擊樹(shù)節(jié)點(diǎn)后顯示其名稱(chēng)相同的數(shù)據(jù),


    image.png

    代碼如下:

  //獲取樹(shù)形結(jié)構(gòu)
        var zTreeObj;
        // zTree 的參數(shù)配置,深入使用請(qǐng)參考 API 文檔(setting 配置詳解)
        var setting = {
            callback: {
                onClick: zTreeOnClick
            }
        };
        // zTree 的數(shù)據(jù)屬性,深入使用請(qǐng)參考 API 文檔(zTreeNode 節(jié)點(diǎn)數(shù)據(jù)詳解)
        var zNodes = [
        //數(shù)據(jù)
        ];
        $(document).ready(function () {
            zTreeObj = $.fn.zTree.init($("#Typetree"), setting, zNodes);
        });
    }
  1. 當(dāng)然別忘記一開(kāi)始要加載樹(shù)
 //獲取樹(shù)形結(jié)構(gòu)
        var zTreeObj;
$(document).ready(function () {
            zTreeObj = $.fn.zTree.init($("#Typetree"), setting, zNodes);
        });


第二組:趙彩鳳

問(wèn)題:
AngularJS 日期控件-年度選擇 怎么給默認(rèn)值?

image.png

目前給日期控件 placeholder="{{year}}",js獲取當(dāng)前年..僅顯示
后臺(tái)處理:若傳過(guò)來(lái)日期為空,則按當(dāng)前年查詢(xún)
問(wèn)如何給年度時(shí)間控件默認(rèn)值?


第三組:蔡永堅(jiān) AugularJS-功能介紹1

數(shù)據(jù)綁定

AngularJS的雙向數(shù)據(jù)綁定,意味著你可以在Mode(JS)中改變數(shù)據(jù),而這些變動(dòng)立刻就會(huì)自動(dòng)出現(xiàn)在View上,反之亦然。即:一方面可以做到model變化驅(qū)動(dòng)了DOM中元素變化,另一方面也可以做到DOM元素的變化也會(huì)影響到Model。
從View到Controller再到View的數(shù)據(jù)交互(例01):

<html ng-app="demoApp">

……

<input type="text" ng-model="user.name" placeholder="請(qǐng)輸入名稱(chēng)"/>

Hello, {{ user.name }}!

關(guān)鍵: ng-app 、 ng-model 和 { {user.name } }

首先: <html>元素的ng-app屬性。標(biāo)識(shí)這個(gè)DOM里面的內(nèi)容將啟用AngularJS應(yīng)用。

其次:告訴AngularJS,對(duì)頁(yè)面上的“user.name” 這個(gè)Model進(jìn)行雙向數(shù)據(jù)綁定。

第三:告訴AngularJS,在“{{ user.name}}”這個(gè)指令模版上顯示“user.name”這個(gè)Model的數(shù)據(jù)。

scopes、module、controller
scopes

$scope是一個(gè)把view(一個(gè)DOM元素)連結(jié)到controller上的對(duì)象。在我們的MVC結(jié)構(gòu)里,這個(gè) $scope 將成為model,它提供一個(gè)綁定到DOM元素(以及其子元素)上的excecution context。

盡管聽(tīng)起來(lái)有點(diǎn)復(fù)雜,但 $scope 實(shí)際上就是一個(gè)JavaScript對(duì)象,controller和view都可以訪問(wèn)它,所以我們可以利用它在兩者間傳遞信息。在這個(gè) $scope 對(duì)象里,我們既存儲(chǔ)數(shù)據(jù),又存儲(chǔ)將要運(yùn)行在view上的函數(shù)。

每一個(gè)Angular應(yīng)用都會(huì)有一個(gè) $rootScope。這個(gè) $rootScope 是最頂級(jí)的scope,它對(duì)應(yīng)著含有 ng-app 指令屬性的那個(gè)DOM元素。

app.run(function($rootScope) { $rootScope.name = "張三"; });

如果頁(yè)面上沒(méi)有明確設(shè)定 $scope ,Angular 就會(huì)把數(shù)據(jù)和函數(shù)都綁定到這里, 第一部分中的例子就是靠這一點(diǎn)成功運(yùn)行的。

這樣,我們就可以在view的任何地方訪問(wèn)這個(gè)name屬性,使用模版表達(dá)式{{}},像這樣:{{ name }}

module

首先需要明確一下模板的概念。在我還不知道有模板這個(gè)東西的時(shí)候,曾經(jīng)用js拼接出很長(zhǎng)的HTML字符串,然后append到頁(yè)面中,這種方式想想真是又土又笨。后來(lái)又看到可以把HTML代碼包裹在一個(gè)<script>標(biāo)簽中當(dāng)作模板,然后按需要取來(lái)使用。

在ng中,模板十分簡(jiǎn)單,它就是我們頁(yè)面上的HTML代碼,不需要附加任何額外的東西。在模板中可以使用各種指令來(lái)增強(qiáng)它的功能,這些指令可以讓你把模板和數(shù)據(jù)巧妙的綁定起來(lái)。

在<html>標(biāo)簽上多了一個(gè)屬性ng-app=”MyApp”,它的作用就是用來(lái)指定ng的作用域是在<html>標(biāo)簽以?xún)?nèi)部分。在js中,我們調(diào)用angular對(duì)象的module方法來(lái)聲明一個(gè)模塊,模塊的名字和ng-app的值對(duì)應(yīng)。這樣聲明一下就可以讓ng運(yùn)行起來(lái)了。

ng-controller

要明確創(chuàng)建一個(gè)$scope 對(duì)象,我們就要給DOM元素安上一個(gè)controller對(duì)象,使用的是ng-controller 指令屬性:

<div ng-controller="MyController"> {{ person.name }} </div>  

ng-controller指令給所在的DOM元素創(chuàng)建了一個(gè)新的$scope 對(duì)象,并將這個(gè)$scope 對(duì)象包含進(jìn)外層DOM元素的$scope 對(duì)象里。在上面的例子里,這個(gè)外層DOM元素的$scope 對(duì)象,就是$rootScope 對(duì)象。這個(gè)scope鏈?zhǔn)沁@樣的:

所有scope都遵循原型繼承(prototypal inheritance),這意味著它們都能訪問(wèn)父scope們。對(duì)任何屬性和方法,如果AngularJS在當(dāng)前scope上找不到,就會(huì)到父 scope上去找,如果在父scope上也沒(méi)找到,就會(huì)繼續(xù)向上回溯,一直到$rootScope 上。即如果controller是多層嵌套的,就會(huì)從最里面一直往外找,這個(gè)scope鏈?zhǔn)沁@樣的:
唯一的例外:有些指令屬性可以選擇性地創(chuàng)建一個(gè)獨(dú)立的scope,讓這個(gè)scope不繼承它的父scope們,這個(gè)會(huì)在指令詳解中說(shuō)明。


第四組:張?jiān)? Pygame編寫(xiě)游戲《外星人入侵》

一. 創(chuàng)建pygame窗口,游戲基本結(jié)構(gòu)如下:

alien_invasion.py

import sys
import pygame
def run_game():
    pygame.init()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("AlienInvasion")

    #主循環(huán)
    while True: #讓最近繪制的屏幕可見(jiàn)
        pygame.display.flip()
run_game()

將創(chuàng)建一個(gè)空的Pygame窗口

二. 創(chuàng)建設(shè)置類(lèi)

settings.py

import random

class Settings():
    def __init__(self):
        self.screen_width = 1000
        self.screen_height = 600
        self.bg_color = (255,255,255)


        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = random.randint(0,256),random.randint(0,256),random.randint(0,256)
        self.bullets_allowed = 1000

        self.speedup_scale = 2
        self.score_scale = 2
        self.initialize_dynamic_settings()

        self.ship_limit = 3


    def initialize_dynamic_settings(self):
        self.ship_speed_factor = 20
        self.bullet_speed_factor = 4
        self.alien_speed_factor = 10
        self.fleet_drop_speed = 5

        #1表示向右,-1表示向左
        self.fleet_direction = 1
        #
        self.alien_points1 = 10

    def increase_speed(self):
        self.bullet_speed_factor *= self.speedup_scale
        self.alien_speed_factor *= self.speedup_scale
        self.fleet_drop_speed *= self.speedup_scale
        self.alien_points1 *= self.score_scale

在修改游戲時(shí),只需要修改此文件的一些值,無(wú)需查找散布在文件中的不同配置。


第五組:陳孚楠 設(shè)計(jì)模式

3、 抽象工廠模式

抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式是指當(dāng)有多個(gè)抽象角色時(shí),使用的一種工廠模式。抽象工廠模式可以向客戶(hù)端提供一個(gè)接口,使客戶(hù)端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。根據(jù)里氏替換原則,任何接受父類(lèi)型的地方,都應(yīng)當(dāng)能夠接受子類(lèi)型。因此,實(shí)際上系統(tǒng)所需要的,僅僅是類(lèi)型與這些抽象產(chǎn)品角色相同的一些實(shí)例,而不是這些抽象產(chǎn)品的實(shí)例。換言之,也就是這些抽象產(chǎn)品的具體子類(lèi)的實(shí)例。工廠類(lèi)負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的具體子類(lèi)的實(shí)例。

為創(chuàng)建一組相關(guān)或相互依賴(lài)的對(duì)象提供一個(gè)接口,而且無(wú)需指定他們的具體類(lèi)。

這里不再舉例,主要在于抽象工廠與工廠模式的區(qū)別:
簡(jiǎn)單的說(shuō),抽象工廠是對(duì)簡(jiǎn)單工廠(工廠方法模式、工廠模式)中的工廠類(lèi)進(jìn)一步抽象成接口,解決了工廠方法中的硬編碼問(wèn)題,因?yàn)橐院笕缬行略鲂碌膶?duì)象,只要再實(shí)現(xiàn)一個(gè)對(duì)應(yīng)的工廠類(lèi),就完成了擴(kuò)展。無(wú)需修改以前的代碼。普通工廠產(chǎn)出是一個(gè)產(chǎn)品(實(shí)例),抽象工廠產(chǎn)出是一個(gè)抽象(接口)。區(qū)別在于,若添加一個(gè)新的產(chǎn)品,前者是修改工廠,后者是創(chuàng)建新工廠(符合“閉合原則”)。

抽象工廠的優(yōu)點(diǎn)/缺點(diǎn):

優(yōu)點(diǎn):

抽象工廠模式隔離了具體類(lèi)的生產(chǎn),使得客戶(hù)并不需要知道什么被創(chuàng)建。
當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶(hù)端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。
增加新的具體工廠和產(chǎn)品族很方便,無(wú)須修改已有系統(tǒng),符合“開(kāi)閉原則”。

缺點(diǎn):

增加新的產(chǎn)品等級(jí)結(jié)構(gòu)很復(fù)雜,需要修改抽象工廠和所有的具體工廠類(lèi),對(duì)“開(kāi)閉原則”的支持呈現(xiàn)傾斜性。(不過(guò)說(shuō)這個(gè)缺點(diǎn)好像有點(diǎn)吹毛求疵了)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容