smstw / windwalker-joomla-rad

Windwalker RAD framework for Joomla CMS
http://ventoviro.github.io/windwalker-rad-doc/
1 stars 2 forks source link

[RFC] 重寫 ScriptManager #99

Closed asika32764 closed 9 years ago

asika32764 commented 9 years ago
ScriptManager::addModule('calendar', function (Module $module, AssetHelper $asset, $selector = '.calendar', $format = 'Y-m-d')
{
    if (!$module->inited())
    {
        $asset->addJs('calendar.js');
    }

    if (!$module->stateInited())
    {
        $asset->internalJS(';jQuery(' . $selector . ').calendar({format: "' . $format . '""})');
    }
});

ScriptManager::calendar('.my-input', 'Y-m-d H:i:s');

$module->inited() 以 module name 作為判斷,所以 calendar.js 永遠只會載入一次。

$module->stateInited() 以 module name + custom arguments 作為判斷,所以相同的 arguments 只會載入一次,更換 arguments 後就可以重新加一段 internal JS

自訂快取規則

如果只希望用 $selector 當作 $module->stateInited() 的判斷 id,忽略 $format,可以這樣寫

function(Module $module, AssetHelper $asset, $selector = '.calendar', $format = 'Y-m-d')
{
    // ...

    $module->setStateId($module->createStateId($selector));

    if (!$module->stateInited())
    {
        $asset->internalJS(';jQuery(' . $selector . ').calendar({format: "' . $format . '""})');
    }
}

ScriptManager::calendar('.my-input', 'Y-m-d H:i:s');

setStateId() 可以決定 state id 的組成規則

asika32764 commented 9 years ago

@LeoOnTheEarth plz review this

LeoOnTheEarth commented 9 years ago

除了幾個小細節外,沒什麼問題了

asika32764 commented 9 years ago

Complete

LeoOnTheEarth commented 9 years ago

:+1: