make it possible to use custom event handlers without binding

pull/449/head
Rich Harris 9 years ago
parent 803d1d2746
commit 6981f55f70

@ -40,30 +40,32 @@ export default {
if ( local.allUsedContexts.length ) { if ( local.allUsedContexts.length ) {
const initialProps = local.allUsedContexts.map( contextName => { const initialProps = local.allUsedContexts.map( contextName => {
if ( contextName === 'root' ) return `root: root`; if ( contextName === 'root' ) return null;
const listName = generator.current.listNames.get( contextName ); const listName = generator.current.listNames.get( contextName );
const indexName = generator.current.indexNames.get( contextName ); const indexName = generator.current.indexNames.get( contextName );
return `${listName}: ${listName},\n${indexName}: ${indexName}`; return `${listName}: ${listName},\n${indexName}: ${indexName}`;
}).join( ',\n' ); }).filter( Boolean ).join( ',\n' );
const updates = local.allUsedContexts.map( contextName => { const updates = local.allUsedContexts.map( contextName => {
if ( contextName === 'root' ) return `${name}.__svelte.root = root;`; if ( contextName === 'root' ) return null;
const listName = generator.current.listNames.get( contextName ); const listName = generator.current.listNames.get( contextName );
const indexName = generator.current.indexNames.get( contextName ); const indexName = generator.current.indexNames.get( contextName );
return `${name}.__svelte.${listName} = ${listName};\n${name}.__svelte.${indexName} = ${indexName};`; return `${name}.__svelte.${listName} = ${listName};\n${name}.__svelte.${indexName} = ${indexName};`;
}).join( '\n' ); }).filter( Boolean ).join( '\n' );
local.init.addBlock( deindent` if ( local.allUsedContexts.length > 1 || local.allUsedContexts[0] !== 'root' ) {
${name}.__svelte = { local.init.addBlock( deindent`
${initialProps} ${name}.__svelte = {
}; ${initialProps}
` ); };
` );
local.update.addBlock( updates ); local.update.addBlock( updates );
}
} }
let render; let render;

@ -173,7 +173,7 @@ export default function addElementAttributes ( generator, node, local ) {
// TODO hoist event handlers? can do `this.__component.method(...)` // TODO hoist event handlers? can do `this.__component.method(...)`
const declarations = usedContexts.map( name => { const declarations = usedContexts.map( name => {
if ( name === 'root' ) return 'var root = this.__svelte.root;'; if ( name === 'root' ) return 'var root = component.get();';
const listName = generator.current.listNames.get( name ); const listName = generator.current.listNames.get( name );
const indexName = generator.current.indexNames.get( name ); const indexName = generator.current.indexNames.get( name );
@ -188,7 +188,7 @@ export default function addElementAttributes ( generator, node, local ) {
local.init.addBlock( deindent` local.init.addBlock( deindent`
var ${handlerName} = ${generator.alias( 'template' )}.events.${name}.call( ${generator.current.component}, ${local.name}, function ( event ) { var ${handlerName} = ${generator.alias( 'template' )}.events.${name}.call( ${generator.current.component}, ${local.name}, function ( event ) {
${handlerBody} ${handlerBody}
}.bind( ${local.name} ) ); });
` ); ` );
generator.current.builders.teardown.addLine( deindent` generator.current.builders.teardown.addLine( deindent`

@ -21,7 +21,7 @@ function render_main_fragment ( root, component ) {
var root = component.get(); var root = component.get();
component.foo( root.bar ); component.foo( root.bar );
}.bind( button ) ); });
appendNode( createText( "foo" ), button ); appendNode( createText( "foo" ), button );
@ -110,6 +110,8 @@ function appendNode( node, target ) {
target.appendChild( node ); target.appendChild( node );
} }
function noop() {}
function assign( target ) { function assign( target ) {
for ( var i = 1; i < arguments.length; i += 1 ) { for ( var i = 1; i < arguments.length; i += 1 ) {
var source = arguments[i]; var source = arguments[i];

Loading…
Cancel
Save