2016-05-13 3 views
1

Я пытаюсь написать простой сайт, в котором перечислены некоторые коды и некоторые html, и дает немного стилизации и объяснения. Как добавить HTML на сервер в мой документ без aurelia, пытаясь разобрать это? Я не использую модель представления, просто HTML.Как игнорировать html в aurelia

Например, я использую Prism, чтобы выделить следующий код:

<span>${firstName}</span> 

, но этот код заканчивается как:

<span></span> 

в моем документе. Есть ли способ, чтобы я сказал aurelia пропустить некоторые части html? Чтобы сделать этот вопрос сложнее, я включаю эти фрагменты кода из реальных исходных файлов (с использованием swig), поэтому я не могу вручную добавлять атрибуты; Я хочу сохранить html «как есть». Однако я могу обернуть его в пользовательский элемент, но я бы предпочел не делать этого.

То, что я попытался (перечислят больше вариантов, как я стараюсь их):

  • Обертывание HTML в тэге. Надеянная ауралия оставила бы это в одиночку, но не играла в кости.
  • Экранирование HTML

Любая помощь будет оценена.

+0

Повторное рассмотрение вашего вопроса, возможно, неправильно понято. Похоже, вы говорите о какой-либо стороне сервера, прежде чем сгенерированный HTML отправляется на клиентскую сторону и обрабатывается Aurelia. – qtuan

+0

Да, я просто попытался прояснить это в комментарии ниже вашего ответа. –

+0

Извините, у меня нет лучшей идеи, чем с помощью пользовательского элемента, который не является вашим выбором. – qtuan

ответ

0

Нет, это невозможно. (16-05-2016)

Остальные два ответа являются обходными и должны использоваться.

1

Если строка HTML хранится в свойстве, вы можете использовать привязку innerhtml. Например:

Посмотреть модели

this.htmlProperty = '<span>${firstName}</span>'; 

Посмотреть

<div innerhtml.bind="htmlProperty | sanitizeHTML"></div> 

или

<div innerhtml="${htmlProperty | sanitizeHTML}"></div> 

От documentation:

Привязка с использованием атрибута innerhtml просто устанавливает свойство innerHTML элемента . Разметка не проходит через систему шаблонов Aurelia . Выражения связывания и требуемые элементы не будут оцениваться .

Всегда используйте HTML-санитацию. Мы предлагаем простой преобразователь, который может использоваться . Вам рекомендуется использовать более совершенный дезинфицирующее средство для HTML, такое как как sanitize-html.

+0

Спасибо за ответ, но это не совсем мой случай использования. У меня есть большой глобус html, внутри этого html у меня есть что-то вроде {% include 'my-file.html'%}, который отображается с помощью swig (на сервере). Этот контент находится внутри

...
, поэтому нет способа привязать его через innerhtml. –

0

С этого момента кажется невозможным игнорировать разбор некоторых узлов DOM в аурелии. По крайней мере, это кажется маловероятным, поэтому я добавляю альтернативу смеси:

Я создал пользовательский атрибут getContent, который принимает URL, отыскивает HTML и вставляет его в innerHTML элемента. С помощью настраиваемого элемента вы можете расширить ответ на qtuan и связать innerHTML с этим «загруженным» контентом.

import {customAttribute, inject} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-fetch-client'; 

@customAttribute('get-content') 
@inject(Element, HttpClient) 
export class GetContentCustomAttribute { 
    constructor(element, http) { 
     this.element = element; 

     http.configure(config => { 
      config 
       .useStandardConfiguration(); 
     }); 

     this.http = http; 
    } 

    valueChanged(newValue) { 
     var self = this; 

     self.http.fetch(newValue) 
      .then(response => { 
       var reader = response.body.getReader(); 
       var decoder = new TextDecoder(); 
       var s = reader.read().then(utf => { 
        var html = decoder.decode(utf.value); 
        self.element.innerHTML = html; 
       }) 

      }); 
    } 
} 

Вы можете использовать этот элемент следующим образом:

<div class="container"> 
    <h3>SWIG include example</h3> 
    <pre class="line-numbers"> 
     <code class="language-markup"> 
      <script type="prism-html-markup" 
        get-content="/modules/components/lists/templates/list.html"> 
      </script> 
     </code> 
    </pre> 
</div> 

Внутренний тег скрипт не нужен для HTML, чтобы получить вводили правильно, это как раз там, чтобы держать вещи упорядоченно.

Я собираюсь оставить этот вопрос открытым еще на несколько дней и надеюсь, что кто-то сможет ответить на реальный вопрос, но на данный момент есть два варианта: qtuan's правильный ответ и мой.

+0

Спасибо, что поделились своим решением! Я волнуюсь, что ошибался в поиске решений с помощью innerhtml. Напомним, что если вы хотите отобразить строку ' $ {firstName}' как есть, это означает * BOTH *: строка должна быть экранирована HTML, а Aurelia не должна ее компилировать. Фактически, это может быть достигнуто простой строковой интерполяцией, например '

${htmlProperty}
'. Если у вас уже есть это решение, возможно, побег HTML был сделан на стороне сервера. – qtuan

+0

Tbh, я просто загружаю файл как текст, поэтому не как 'application/html', который (исправьте меня, если я ошибаюсь) автоматически ускользает от html. Это решение должно «работать» с правильной структурой на стороне сервера. –

0

Вы можете просто использовать тот же синтаксис для вывода синтаксиса в виде строки, которая является то, что я делаю с той же Prism.

<span>${'${myCodeVar}'}</span> 
Смежные вопросы