tutorial style implement custom create code attribute amp html knockout.js special-characters

html - style - implement amp



Por qué es & convertirse en & amp; después de la carga de la página? (1)

Estoy usando Firefox y trabajando en una página cuando lo veo & convierto en & .

Usualmente puedo arreglar esto usando html_entitiy_decode() - pero en este caso no está funcionando.

Entonces descubrí esto. La alerta se activa una vez que se carga la página.

antes de

Después

Los datos se cargan usando PHP / Yii, no a través de JS / Ajax. Sin embargo, estoy agregando / eliminando marcas usando JS Knockout.

<ul data-bind="template: { name: ''brand-item-template'', data: $root.brands}"> <li> <span id="<?= $brand->id?>" data-bind="text: brand_name, attr: {''id'': brand_id}"><?= $brand->name; ?></span> <a href="#" class="remove el-icon-remove-circle" data-bind="click: $parent.removeBrand"></a> </li> </ul>

Actualizar

Descubrí que este código JS Knockout es lo que hace el cambio. Pero este código no debería activarse hasta que agregue una marca. Entonces, ¿por qué esto afecta my & s?

Es la self.addBrand = function() que realiza el cambio. Si elimino esta función y dejo el resto tal como está, todo está bien. ¿Puede ser un error Knockout?

$(''#store.manage-special-offers'').exists(function(){ Store.mangeSpecialOffers(); }); function manageBrandListModel() { var self = this; var store_id = $(''.data-item-id'').val(); var exiting_list = $(''.brand-list ul'').clone(); // Data self.brands = ko.observableArray(create_list(exiting_list)); self.brand_name = ko.observable(); self.brand_id = ko.observable(); self.store_id = ko.observable(store_id); // This is the function that makes the chage self.addBrand = function() { if (self.brand_name() != "") { // Update DB $(''#store.manage-brands'').exists(function(){ $.ajax({ url: site_url + ''/associatebrand'', type: "POST", dataType: ''json'', data: { Brand: { brandId : self.brand_id(), storeId : self.store_id(), add : true } }, success: function (data) { // Add brand to GUI list self.brands.push(new brand(self.brand_id(), self.brand_name())); self.brand_name(""); } }); }); } }.bind(self); (...) function create_list(exiting_list){ var arr_list = []; $(exiting_list).find(''li'').each(function(e,li){ var id = $(li).find(''span'').prop(''id''); var name = $(li).find(''span'').html(); // <--- This is the problem. Must be .text() arr_list.push(new brand(id,name)); }); return arr_list; }

¿Puede alguien explicar por qué ocurre esto?


El mérito debe ir tanto para JeremyCook como para Quentin por apuntarme en la dirección correcta.

$(exiting_list).find(''li'').each(function(e,li){ var id = $(li).find(''span'').prop(''id''); var name = $(li).find(''span'').html(); // <--- This is the problem. Must be .text() arr_list.push(new brand(id,name)); });

Lo que hice mal fue que utilicé .html() y el texto se devolvió en formato HTML. Cambiar esto a .text() resolvió mi problema.