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 ) {
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 indexName = generator.current.indexNames.get( contextName );
return `${listName}: ${listName},\n${indexName}: ${indexName}`;
}).join( ',\n' );
}).filter( Boolean ).join( ',\n' );
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 indexName = generator.current.indexNames.get( contextName );
return `${name}.__svelte.${listName} = ${listName};\n${name}.__svelte.${indexName} = ${indexName};`;
}).join( '\n' );
}).filter( Boolean ).join( '\n' );
local.init.addBlock( deindent`
${name}.__svelte = {
${initialProps}
};
` );
if ( local.allUsedContexts.length > 1 || local.allUsedContexts[0] !== 'root' ) {
local.init.addBlock( deindent`
${name}.__svelte = {
${initialProps}
};
` );
local.update.addBlock( updates );
local.update.addBlock( updates );
}
}
let render;

@ -173,7 +173,7 @@ export default function addElementAttributes ( generator, node, local ) {
// TODO hoist event handlers? can do `this.__component.method(...)`
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 indexName = generator.current.indexNames.get( name );
@ -188,7 +188,7 @@ export default function addElementAttributes ( generator, node, local ) {
local.init.addBlock( deindent`
var ${handlerName} = ${generator.alias( 'template' )}.events.${name}.call( ${generator.current.component}, ${local.name}, function ( event ) {
${handlerBody}
}.bind( ${local.name} ) );
});
` );
generator.current.builders.teardown.addLine( deindent`

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

Loading…
Cancel
Save