以下是我的网页代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GP and Practice search</title> <!-- Scripts -->
<script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="elements/elements.html" />
<link rel="stylesheet" type="text/css" href="Styles/styles.css" />
<link rel="stylesheet" type="text/css" href="Styles/home.css"/>
<!-- google fonts definitions -->
<link href='http://fonts.googleapis.com/css?family=Roboto:400,700' rel='stylesheet' type='text/css'>
</head>
<body unresolved class="fullbleed layout vertical">
<dom-module id="page-scafolding">
<template>
<paper-drawer-panel elevation="1">
<paper-header-panel main mode="waterfall-tall">
<paper-toolbar id="mainToolbar">
<paper-icon-button id="paperToggle" icon="menu" paper-drawer-toggle></paper-icon-button>
<span class="flex"></span>
<paper-icon-button icon="search" on-tap="srchandler" id="srchandler"></paper-icon-button>
<input type="text" id="searchText" hidden$="{{hideSearch}}" onkeypress="handleKeyPress(event);" />
<div class="middle paper-font-display2 app-name ident">Search</div>
</paper-toolbar>
<paper-material elevation="1" class="contentContainer" >
<div id="Content" >
<span>
<paper-input id="searchCriteria"
class="searchBox"
label="Code or name of the GP or Practice you are looking for?" />
</span>
<div style="text-align:center; padding:10px;">
<paper-button tabindex="0" raised="true" class="colorful" on-click="searchPractice">Search for Practice</paper-button>
<paper-button tabindex="0" raised="true" class="colorful" on-click="searchPractice">Search for GP</paper-button>
</div>
<div id="SearchResult">
<template is="dom-repeat" items="{{data}}">
<p><span>{{item.Name}}</span> (<span>{{item.PracticeCode}}</span>)</p>
</template>
</div>
</div>
</paper-material>
<iron-ajax id="GPSearch"
url="/GPPractices.ashx"
handle-as="json"
last-response="{{data}}"
params='{{ajaxParams}}'
handleerror="handleError">
</iron-ajax>
</paper-header-panel>
</paper-drawer-panel>
</template>
<script>
Polymer({
is: "page-scafolding",
ready: function () {
this.hideSearch = true;
this.$.searchText.keyup(function (e) {
alert('off to search for something!');
});
},
ajaxParams: {
type: String,
computed: 'buildSearchRequest();'
},
buildSearchRequest: function () {
return {
Command: 'Search',
Criteria: this.$.searchCriteria
}
},
srchandler: function () {
// search for contents of search box is showing, otherwise show it.
if (!this.hideSearch)
{
alert('off to search for something!');
}
else {
this.hideSearch = !this.hideSearch;
if (!this.hideSearch) {
this.$.searchText.focus();
}
}
},
searchPractice: function () {
try {
this.$.GPSearch.generateRequest();
}
catch (e) {
alert("Whoops! " + e.message);
}
},
handleError: function (request, error) {
alert('Whoops! ' + error);
}
});
</script>
</dom-module>
<page-scafolding />
</body>
</html>
我已经进行了ajax调用,并且正在调用GPPractices.ashx。我要做的是将两个参数传递给此页面。一个是Command,其值为'search',另一个参数是输入到paperInput中的任何一个名为searchCriteria的内容。
麻烦的是没有获得两个参数Command和Criteria。我得到一个空的QueryString,它看起来不像buildSearchRequest。
那么如何才能得到它,以便如果我在纸张输入中输入“abba”,则查询字符串应为
Command=search&criteria=abba
答案 0 :(得分:8)
我在下面放了一个简化的代码工作版本。以下是一些注意事项:
此声明
ajaxParams: {
type: String,
computed: 'buildSearchRequest();'
},
是属性定义,必须进入properties
对象。
回调值,例如
computed: 'buildSearchRequest();'
看起来像函数但它们不是实际代码,也不需要尾随;
您的计算函数需要有一个参数来告诉它何时重新计算。我修改它看起来像这样:
computed: 'buildSearchRequest(searchCriteria)'
我将searchCriteria
绑定到输入value
。
Polymer代码中的事件处理程序使用on-
表示法,所以
onkeypress="handleKeyPress(event);"
应该是
on-keypress="handleKeyPress"
iron-ajax错误通知是通过名为error
的事件,所以
handleerror="handleError"
应该是
on-error="handleError"
我添加了stringify
位和参数的输出,这样您就可以在键入时看到它的计算,这对您的用例来说不是必需的。
HTML中只有极少数元素 void (无需关闭标记)。你应该避免做<tag-name/>
,因为它最终会造成麻烦。
直播:http://jsbin.com/sorowi/edit?html,output
<dom-module id="page-scafolding">
<template>
<paper-input
label="Code or name of the GP or Practice you are looking for?"
value="{{searchCriteria}}">
</paper-input>
<br>
<div style="text-align:center; padding:10px;">
<paper-button tabindex="0" raised="true" style="background-color: lightblue;" on-click="searchPractice">Search for Practice</paper-button>
</div>
<iron-ajax id="GPSearch"
url="/GPPractices.ashx"
handle-as="json"
last-response="{{data}}"
params="{{ajaxParams}}"
on-error="handleError">
</iron-ajax>
<br><br>
ajaxParams: <span>{{stringify(ajaxParams)}}</span>
<div id="SearchResult">
<template is="dom-repeat" items="{{data}}">
<p><span>{{item.Name}}</span> (<span>{{item.PracticeCode}}</span>)</p>
</template>
</div>
</template>
<script>
Polymer({
is: "page-scafolding",
properties: {
ajaxParams: {
type: String,
computed: 'buildSearchRequest(searchCriteria)'
}
},
stringify: JSON.stringify,
buildSearchRequest: function (criteria) {
return {
Command: 'Search',
Criteria: criteria
};
},
searchPractice: function () {
this.$.GPSearch.generateRequest();
},
handleError: function(e) {
alert('Whoops! ' + e.detail);
}
});
</script>
</dom-module>
HTH
答案 1 :(得分:0)
我得到了它的工作。不确定这是否是正式的最佳方式,但是通过将searchPractice函数的代码更改为以下内容 - 发送了正确的QueryString并且搜索有效。
searchPractice: function () {
try {
this.$.GPSearch.params = {
Command: 'Search',
Criteria: this.$.searchCriteria.value
};
this.$.GPSearch.generateRequest();
}
catch (e) {
alert("Whoops! " + e.message);
}
}