2015-09-21 11 views
5

Questo è così esasperante. Sembra che dovrebbe essere così semplice, ma non riesco a trovare l'incantesimo magico.Rivets.js: Quando si fa clic sul pulsante, chiamare una funzione con un argomento da un collegamento dati

Ecco l'essenza di ciò che devo fare:

<div rv-each-thing="data.things"> 
    <input type=button value="Click" onclick="abc({thing})"> 
</div> 

Questo dovrebbe illustrare ciò che devo fare. Ho provato molte cose diverse, ma niente sembra funzionare.

+0

'RV-on-clic = "abc ({} cosa)"' http://rivetsjs.com/docs/reference/# on- [event] È necessario leggere il binding bidirezionale e utilizzare la documentazione della libreria di binding. – Pogrindis

+0

No. L'ho sicuramente provato, e non funziona. Fornisce questo errore: Uncaught TypeError: this.call non è una funzione/t.public.handler @ rivets.bundled.min.js: 6/t.Binding.e.eventHandler @ rivets.bundled.min.js: 6/n .event.dispatch @ jquery-2.1.4.min.js: 3/n.event.add.r.handle @ jquery-2.1.4.min.js: 3 – paulwal222

+0

L'unica soluzione funzionante che ho trovato utilizza una funzione che è un membro di {thing}, che mi sembra ridicolo. Quindi: 'rv-on-click =" cosa.my_funzione "' – paulwal222

risposta

3

Di seguito si riporta la configurazione di default del gestore di eventi dal sito rivetti:

// Augment the event handler of the on-* binder 
handler: function(target, event, binding) { 
    this.call(target, event, binding.view.models) 
} 

Quindi, a parte l'oggetto evento, è anche possibile ottenere un riferimento ai modelli relativi al particolare legame come secondo argomento.

con cui è possibile accedere all'oggetto particolare

Per esempio

<div rv-each-thing="data.things"> 
    <input type=button value="Click" rv-on-click="abc"> 
</div> 

function abc(event,rivetsBinding){ 
    rivetsBinding.thing //heres your thing :) 
} 
+0

non ha funzionato per me, – sairfan

+0

@sairfan per far funzionare questo evento l'evento dovrebbe essere associato con rilegatore di eventi rivetti. La risposta aveva la copia incollata dalla domanda. Se il binding dei rivetti non funziona, per favore condividi un [mcve] –

0

Ecco qualcosa come ho passati attraverso questo. Basta copiare e incollare esempi di lavoro al di sotto

<body> 
    <div rv-each-book="model.books"> 
     <button rv-on-click="model.selectedBook | args book"> 
      Read the book {book} 
     </button> 
    </div> 
</body> 

<script type="text/javascript"> 
    rivets.formatters["args"] = function (fn) { 
     var args = Array.prototype.slice.call(arguments, 1); 
     return function() { 
      return fn.apply(null, args); 

     }; 
    }; 

    rvBinder = rivets.bind(document.body, { 
     model: { 
      selectedBook: function (book) { 
       alert("Selected book is " + book); 
      }, 
      books: ["Asp.Net", "Javascript"] 
     } 
    }); 
</script> 

o un approccio alternativo è vincolante evento

<body> 
    <div rv-each-book="books"> 
     <a rv-cust-href="book"> 
      Read the book {book} 
     </a> 
    </div> 
</body> 

<script type="text/javascript"> 

    rivets.binders['cust-href'] = function (el, value) { 
     //el.href = '/Books/Find/' + value; 
     //OR 
     el.onclick = function() { alert(value); }; 

    } 

    rvBinder = rivets.bind(document.body, { 
     books: ["Asp.Net", "Javascript"] 
    }); 
</script> 
+0

Questo non è il modo giusto per farlo, a meno che qualcosa non si rompa con un aggiornamento di rivetti, in tal caso dovresti segnalare un bug piuttosto che usare un lavoro scarso intorno allo –

+1

interrompo il mio progetto fino a quando non ottengo una soluzione ?? dobbiamo uscire dalla situazione, aggiorneremo quando sarà aggiornato in rivetsjs. questo problema è già stato segnalato, una soluzione come sopra è discussa nella pagina relativa a rivetsjs, non ti sei nemmeno preoccupato di verificare cosa sto cercando di dire. – sairfan

+0

Ho controllato la fonte dei rivetti prima di postare il commento, e la risposta esistente dovrebbe ancora funzionare con modifiche minori agli argomenti. La risposta è di 6 anni, le librerie JS si aggiornano molto velocemente. La risposta contiene il codice per invocare il gestore di eventi dalla fonte del rivetto al momento della scrittura. Sembra che tu non abbia fatto alcuna investigazione sul perché la soluzione esistente non funziona ... –

Problemi correlati